Add Two Numbers
Updated:
ListNode를 정확히 사용할줄 알아야 한다
맨앞을 가리키는 헤더는 그대로 냅두고, 계속 뒤로 노드를 만들어서 이어 나가는것이 핵심이다.
그래서 뒤로 계속 향할 수 있게 가는 리스트노드 변수가 하나 더 필요하게 된다. 여기서는 ret가 될것이다.
by Java
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = null;
ListNode ret = null;
int sum = 0;
while (l1 != null || l2 != null) {
if (l1 != null) sum += l1.val;
if (l2 != null) sum += l2.val;
if (head == null) {
head = new ListNode(sum % 10);
sum /= 10;
ret = head; // 처음에는 head와 ret 모두 null이므로, 인스턴스 부여후, 같은 주소를 갖도록 공유(단순대입을 하게 되면 가능해짐)
} else {
ListNode cur = new ListNode(sum % 10);
sum /= 10;
ret.next = cur; // 뒤에 연결후
ret = ret.next; // 뒤로 이동
}
if (l1 != null) l1 = l1.next;
if (l2 != null) l2 = l2.next;
}
if (sum != 0) { // l1, l2 노드 둘다 끝이났어도 sum이 남아있을수 있기 때문에, 한번더 로직을 수행
ret.next = new ListNode(sum % 10);
}
return head;
}
}
Leave a comment