Add Two Numbers
역순으로 숫자가 저장된 링크드 리스트 l1, l2가 주어질 때 두 숫자의 합의 역순을 링크드 리스트로 반환하는 문제
제약사항
1. 링크드 리스트의 노드 수의 범위는 1 ~ 100
2. 0 <= Node.val <= 9
3. 숫자는 0으로 시작하지 않는다
Example 1:
Input: l1 = [2,4,3], l2 = [5,6,4] |
Example 2:
Input: l1 = [0], l2 = [0] |
Example 3:
Input: l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] |
Solution
/** |
head부터 tail까지 수의 덧셈을 진행하는 문제로 두 수의 결과가 10 이상이 되면 올림을 해주어야 한다.
먼저 올림 수를 저장할 변수 carry를 선언하고 반환할 head와 현재 노드를 저장할 current를 선언한다.
let carry = 0; |
l1, l2, carray 세 값이 모두 존재하지 않을 때까지 반복하는 while 문을 선언한다.
while(l1 || l2 || carry) {} |
반복문 내부에서 값이 있으면 값을 선택하고 없으면 0을 선택하여 더한 후 10보다 큰 경우 올림수와 더한 값을 변경한다.
const val1 = l1 ? l1.val : 0; |
만약 head에 값이 없다면 링크드 리스트를 만들어 저장 후 current에 head를 저장한다.
head에 값이 있다면 다음 노드에 값을 만들어 저장 후 current에 다음 노드를 저장한다.
l1, l2에는 반복이 한 번 끝날 때마다 다음 노드를 저장하여 끝까지 순회할 수 있도록 한다.
if(!head) { |
마지막으로 head를 반환하면 각 수의 합을 역순으로 저장한 링크드 리스트가 반환된다.

