[Medium] 445. Add Two Numbers II

https://leetcode.com/problems/add-two-numbers-ii/

 

Add Two Numbers II - LeetCode

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

문제

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;
};