【leetcode】2. 两数相加

37 阅读1分钟

leetcode-2.png

链表式加法,只不过开头的是个位,注意处理进位即可
两个链表的长度不一致,也需要注意处理这个问题

var addTwoNumbers = function (l1, l2) {
    let dummy = new ListNode(-1)
    let head = dummy
    let tmp = 0
    while (l1 || l2 || tmp >= 10) {
        tmp = (l1 ? l1.val : 0) + (l2 ? l2.val : 0) + (tmp >= 10 ? 1 : 0)
        head.next = new ListNode(tmp >= 10 ? tmp % 10 : tmp)
        // 防止为空
        l1 = l1?.next
        l2 = l2?.next
        head = head.next
    }
    // 给链表结尾
    head.next = null
    return dummy.next
};

下面是gpt给予建议后优化的代码

var addTwoNumbers = function (l1, l2) {
    let dummy = new ListNode(-1);
    let head = dummy;
    let tmp = 0;

    while (l1 || l2 || tmp > 0) {
        // 计算当前节点的和,包含上一次的进位
        tmp = (l1 ? l1.val : 0) + (l2 ? l2.val : 0) + tmp;
        
        // 当前节点的值为 tmp % 10,并更新 tmp 为下一次的进位
        head.next = new ListNode(tmp % 10);
        tmp = Math.floor(tmp / 10); // 更新进位
        
        // 移动到下一个节点
        if (l1) l1 = l1.next;
        if (l2) l2 = l2.next;
        head = head.next;
    }

    return dummy.next;
};