0이상이 들어있는 리스트 2개가 주어진다.
각 리스트는 원 숫자의 역순
으로 리스트가 저장되어있고
두 리스트의 합을 다시 리스트로 제출해라 라는 문제다.
스트링 빌더를 통해 Long으로 변환시키고 편하게 풀려했다😫
당연히 Long이상의 값은 연산이 안됐고, 결국은 Head & Tail을 만들어서 Deque을 만드는 구조로 이 문제를 해결했던 것 같다.
위 문제는 기존의 Deque과는 조금 다른점이 존재하는데 , 10이상이 나올 경우
Carry 값으로 체크를 해줘서 뒤에 1을 더해주어야 된다는 점이다.
class Solution {
public ListNode addTwoNumbers(ListNode l1, ListNode l2) {
ListNode head = null;
ListNode tail = null;
while(l1!=null && l2 != null){
int value = l1.val + l2.val;
if(value>=10){
if(l1.next!=null) l1.next.val++;
else l1.next = new ListNode(1,null);
value-=10;
}
if(head==null){
ListNode newNode = new ListNode(value, null);
head = newNode;
tail = newNode;
}else{
ListNode newNode = new ListNode(value, null);
tail.next = newNode;
tail = newNode;
}
l1 = l1.next;
l2 = l2.next;
}
while(l1!=null){
if(l1.val>=10){
if(l1.next!=null) l1.next.val++;
else l1.next = new ListNode(1,null);
l1.val-=10;
}
ListNode newNode = new ListNode(l1.val, null);
tail.next = newNode;
tail = newNode;
l1 = l1.next;
}
while(l2!=null){
if(l2.val>=10){
if(l2.next!=null) l2.next.val++;
else l2.next = new ListNode(2,null);
l2.val-=10;
}
ListNode newNode = new ListNode(l2.val, null);
tail.next = newNode;
tail = newNode;
l2 = l2.next;
}
return head;
}
}
소스코드를 보면 중복코드가 좀 들어가지만 복사붙여넣기의 일환이니 드는 시간은 적었다.
이렇게 보고나니 약간 머지소트의 소스코드의 느낌도 난다 (방법은 다르지만)
아무튼 해결 👌