2.俩数相加

144 阅读1分钟

思路

从个位开始相加,遇到10进1

代码

var addTwoNumbers = function(l1, l2) {
    //新建一个新链表
    const l3 = new ListNode(0)
    //遍历链表
    let p1 = l1
    let p2 = l2
    let p3 = l3
    let c = 0
    //p1或者p2为空用0代替
    while(p1 || p2){
        const v1 = p1 ? p1.val : 0
        const v2 = p2 ? p2.val : 0
        //如果遇到10要将其给到下一轮
        const val = v1 + v2 + c
        c = Math.floor(val / 10)
        //个位上的数添加到新链表上
        p3.next = new ListNode(val % 10)
        if(p1) p1 = p1.next
        if(p2) p2 = p2.next
        p3 = p3.next
    }
    //结束后如果进1了追加到新链表上
    if(c){
        p3.next = new ListNode(c)
    }
    //新链表在空节点后面
    return l3.next
};

复杂度

时间O(n):1个while 空间O(n):新链表l3