https://leetcode.com/problems/add-two-numbers-ii/
문제
You are given two non-empty linked lists representing two non-negative integers. The most significant digit comes first and each of their nodes contains a single digit. Add the two numbers and return the sum as a linked list.
You may assume the two numbers do not contain any leading zero, except the number 0 itself.
음수가 아닌 두 정수를 나타내는 비어 있지 않은 두 개의 연결 목록이 제공됩니다. 가장 중요한 자리가 먼저 오고 각각의 노드는 하나의 자리를 포함한다. 두 숫자를 더하고 합계를 연결 리스트로 반환합니다.
숫자 0을 제외하고 두 숫자는 선행 0을 포함하지 않는다고 가정할 수 있습니다.
예시
Example 1:
Input: l1 = [7,2,4,3], l2 = [5,6,4]
Output: [7,8,0,7]
Example 2:
Input: l1 = [2,4,3], l2 = [5,6,4]
Output: [8,0,7]
Example 3:
Input: l1 = [0], l2 = [0]
Output: [0]
제약 조건
Constraints:
- The number of nodes in each linked list is in the range [1, 100].
- 0 <= Node.val <= 9
- It is guaranteed that the list represents a number that does not have leading zeros.
해결 코드
/**
* Definition for singly-linked list.
* function ListNode(val, next) {
* this.val = (val===undefined ? 0 : val)
* this.next = (next===undefined ? null : next)
* }
*/
/**
* @param {ListNode} l1
* @param {ListNode} l2
* @return {ListNode}
*/
var addTwoNumbers = function(l1, l2) {
let stack1 = [];
let stack2 = [];
// stack1에 l1 value 넣기
while(l1) {
stack1.push(l1.val);
l1 = l1.next;
}
// stack2에 l2 value 넣기
while(l2) {
stack2.push(l2.val);
l2 = l2.next;
}
// l3 새로운 노드 생성
let l3 = new ListNode(0);
// stack1과 stack2의 value를 더한 값을 l3 새로운 node 생성
while(stack1.length || stack2.length) {
let sum = 0;
if(stack1.length) sum += stack1.pop();
if(stack2.length) sum += stack2.pop();
sum += l3.val;
l3.val = sum%10;
let head = new ListNode(Math.floor(sum/10));
head.next = l3;
l3 = head;
}
return (l3.val === 0) ? l3.next : l3;
};
Comment