Algorithm
2. Add Two Numbers
happyMoons
2024. 1. 1. 18:08
문제
Linked List 로 구성된 2개의 값이 주어졌을때 두 Linked List 의 원소를 합친 결과를 리턴하는 문제입니다.
각 원소는 0 이상 9 이하의 한자리수 값이 존재합니다. (0 <= x <= 9)
각 원소는 한자리수만 들어갈 수 있기 때문에 10 이상의 수가 되면 다음 원소로 자리수 값을 옮겨야 합니다.
예를들어 아래와 같습니다.
L1 : 2 -> 4 -> 3
L2 : 5 -> 6 -> 4
Result : 7 -> 0 -> 8
문제 풀이
public static ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode dummy = new ListNode(-1);
ListNode node = dummy;
int temp = 0;
while(l1 != null || l2 != null || temp > 0) {
if(l1 != null) {
temp += l1.val;
l1 = l1.next;
}
if(l2 != null) {
temp += l2.val;
l2 = l2.next;
}
node.next = new ListNode(temp % 10);
temp /= 10;
node = node.next;
}
return dummy.next;
}
1. 리턴할 노드의 첫번째 위치를 리턴하기 위해 dummy 노드를 만들고,
L1 노드와 L2 노드의 값을 dummy 노드에 더해가기 위해서 node 노드를 만듭니다.
2. L1 과 L2 가 null 이 아니면 temp 라는 변수에 값을 더해줍니다.
3. temp 변수에 있는 값을 신규 node 에 할당하는데,
10 이상의 자리수가 될 수도 있기 때문에 temp % 10 코드로 나머지 자리수만 node 에 할당합니다.
(ex. temp 값이 15 인 경우, 5만 node 에 할당.)
4. temp 값을 초기화 하거나 자리수를 넘기기 위해 temp /= 10 을 합니다.
예를들어, 15인 경우 temp / 10 한 값은 1 이 되고, 단순히 7인 경우 temp / 10 한 값은 0이 됩니다.
5. node.next 로 계속해서 반복하고, 마지막 첫번째 위치를 리턴해야하기 때문에 dummy.next 값을 리턴합니다.