Skip to content

Latest commit

 

History

History
50 lines (43 loc) · 1.32 KB

File metadata and controls

50 lines (43 loc) · 1.32 KB

给你两个 非空 链表来代表两个非负整数。数字最高位位于链表开始位置。它们的每个节点只存储一位数字。将这两数相加会返回一个新的链表。

你可以假设除了数字 0 之外,这两个数字都不会以零开头。

示例1: 输入:l1 = [2,4,3], l2 = [5,6,4] 输出:[8,0,7]

示例2: 输入:l1 = [0], l2 = [0] 输出:[0]

//  利用栈先进后出得结构特点,将两条链表依次压入两个栈中,再将栈顶元素弹出、相加,得到新的节点
// 但需要处理边界,和超出进位得问题
var addTwoNumbers = function (l1, l2) {
    let stack1 = []
    let stack2 = []
    while (l1 !== null) {
        stack1.push(l1.val)
        l1 = l1.next
    }
    while (l2 !== null) {
        stack2.push(l2.val)
        l2 = l2.next
    }

    let curr = null;
    let carry = 0
    while (stack1.length != 0 || stack2.length != 0) {
        let sum = 0
        if (stack1.length != 0) {
            sum += stack1.pop()
        }
        if (stack2.length != 0) {
            sum += stack2.pop()
        }

        sum += carry // 加上进位
        const node = new ListNode((sum % 10), curr)
        carry = Math.floor(sum / 10)
        curr = node
    }

    if (carry != 0) {
        return new ListNode(1, curr)
    }
    return curr
};