2. 两数相加

链表

解题思路

  1. 初始化一个哑结点 dmy ,迭代 l1l2 并将 l1l2 的和加入到 dmy 的后面;

  2. l1l2 的和要判断是否有进位,超过 10 要进位;

  3. 下一次求 l1l2 的和将进位加进去;

  4. 最后返回结果 dmy.next

复杂度

  1. 时间复杂度:O(max(m,n)),其中 mn 分别为两个链表的长度,要遍历两个链表的全部位置,而处理每个位置只需要 O(1) 的时间;

  2. 空间复杂度:O(1),注意返回值不计入空间复杂度;

代码实现

var addTwoNumbers = function (l1, l2) {
    let dmg = new ListNode(0, null);
    let curr = dmg;
    let addOne = 0;

    while (l1 || l2 || addOne) {
        let val1 = l1 ? l1.val : 0;
        let val2 = l2 ? l2.val : 0;
        let sum = val1 + val2 + addOne;

        addOne = sum >= 10 ? 1 : 0;
        curr.next = new ListNode(sum % 10, null);
        curr = curr.next;

        l1 && (l1 = l1.next);
        l2 && (l2 = l2.next);
    }

    return dmg.next;
};
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 链表
    1. 1.1. 解题思路
    2. 1.2. 复杂度
    3. 1.3. 代码实现