[Leetcode] 2.Add Two Numbers (Java)

Ash·2020년 9월 13일
0

문제

문제링크

https://leetcode.com/problems/add-two-numbers/

문제설명

ListNode안의 value가 모두 음의 정수가 아니고 비어있지 않은 ListNode가 두 개 주어진다. 두개의 ListNode의 각 자리수를 합하여 더한 수를 뒤집어 출력하는 문제이다.

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode() {}
 *     ListNode(int val) { this.val = val; }
 *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
 * }
 */
 class Solution {
 public ListNode addTwoNumbers(ListNode l1, ListNode l2){
 }
}

해결방법

ListNode 객체 answer, node 두개를 생성하고 node에 answer객체를 복사한다.(shallow copy)

ListNode answer = new ListNode();
ListNode node = answer;

반복문을 사용하여 노드가 비어있지 않다면 value값을 꺼내 더하였다.
이 때 합이 10을 넘는 경우는 다음 노드의 숫자의 합에 더해주어야하기 때문에
10으로 나눈 몫을 carry로, 10을 나눈 나머지 값을 그 자리의 수로 사용하였다.
그 다음 새로운 노드(ListNode temp)를 만들어 노드의 value에는 자리의 수를 합한 값을 넣고 처음만든 ListNode인 node의 next에 temp를 넣는다.
그 다음 해당 node에 node.next를 넣는다.
이유 :
위의 과정을 두개의 노드 값이 빌 때 까지 반복한 후 올림 값 (carry) 가 0이상이면 새 노드를(temp) 생성하고 temp값을 넣어 해당 노드를 node의 next에 넣어준다.

위 과정을 완료한 후 answer와 node의 참조값이 동일하므로 answer의 next를 return 한다.

코드

public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
		ListNode answer = new ListNode();
		ListNode node = answer;
		
		int carry = 0;
		
        while(l1 != null || l2 != null) {
        	int sum = carry;
        	
        	if(l1 != null) {
        		sum += l1.val;
        		l1 = l1.next;
        	}
        	if(l2 != null) {
        		sum += l2.val;
        		l2 = l2.next;
        	}
        	
        	carry = sum / 10;
        	sum %= 10;
        	
        	ListNode temp = new ListNode(sum);
        	node.next = temp;
        	node = node.next;
        }
        if(carry > 0) {
        	ListNode temp = new ListNode(carry);
        	node.next = temp;
        }
        return answer.next;
	}
profile
기록남기기👩‍💻

0개의 댓글