반응형
1. 문제
- 2개의 단일 연결 리스트가 주어질 때, 같은 인덱스를 가지는 각 노드를 합하여 1개의 단일 연결 리스트를 반환하라.
2. 해결
/**
* Definition for singly-linked list.
* class ListNode {
* val: number
* next: ListNode | null
* constructor(val?: number, next?: ListNode | null) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
* }
*/
function addTwoNumbers(l1: ListNode | null, l2: ListNode | null): ListNode | null {
const dummy = new ListNode(0)
let dummyP = dummy;
let carry = 0;
while(l1 || l2) {
let sum = 0;
if(l1) {
sum+=l1.val;
l1 = l1.next;
}
if(l2) {
sum+=l2.val;
l2 = l2.next;
}
sum += carry;
carry = Math.floor(sum/10);
sum %= 10;
dummyP.next = new ListNode(sum);
dummyP = dummyP.next;
}
if(carry !== 0) dummyP.next = new ListNode(carry);
return dummy.next;
// let p1 = l1, p2 = l2;
// let numStr1 ='', numStr2 = '';
// while(p1) {
// numStr1 += p1.val.toString();
// p1 = p1.next;
// }
// while(p2) {
// numStr2 += p2.val.toString();
// p2 = p2.next;
// }
// const dummy = new ListNode(0);
// let dummyP = dummy;
// const total = String(BigInt(numStr1.split('').reverse().join('')) + BigInt(numStr2.split('').reverse().join('')))
// total.split('').reverse().forEach(num => {
// const node = new ListNode(Number(num));
// dummyP.next = node;
// dummyP = node;
// })
// return dummy.next;
};
- 첫 번째 풀이는 주석처리 한 부분이다.
- 두 연결 리스트를 탐색하면서, 정수를 추출하고 더하고 뒤집어 각 자리수 별로 노드로 추가하는 것. 성능이 좋지 않았다.
- 다른 사람들 풀이를 참고했을 때, carry를 활용해서 sum을 계산하고 노드를 추가하는 과정을 거친다.