算法列表

445.两数相加|| 中等

布莱克2026-04-08 10:32链表

问题:

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

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

示例1:

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

示例2:

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

示例3:

输入:l1 = [0], l2 = [0]
输出:[0]

回答:

和逆序的链表相比,先把链表反转再进行相加

var addTwoNumbers = function(l1, l2) {
    let prev1 = null;
    let prev2 = null;
    while (l1) {
        let next = l1.next;
        l1.next = prev1;
        prev1 = l1;
        l1 = next;
    }
    while (l2) {
        let next = l2.next;
        l2.next = prev2;
        prev2 = l2;
        l2 = next;
    }
    let dummy = new ListNode();
    let cur = dummy;
    let add = 0;
    while (prev1 || prev2 || add) {
        let val1 = prev1 ? prev1.val : 0;
        let val2 = prev2 ? prev2.val : 0;
        let sum = add + val1 + val2;
        let value = sum % 10;
        add = Math.floor(sum / 10);
        let node = new ListNode(value);
        node.next = cur.next;
        cur.next = node;
        prev1 = prev1 && prev1.next;
        prev2 = prev2 && prev2.next;
    }
    return dummy.next;
};


assistant