两数相加

题目描述:

给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。

如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。

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

求解代码:

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var addTwoNumbers = function(l1, l2) {
    let sum = 0
    let head = {}
    let cur = head // 将新建的虚拟节点赋值给当前节点
    
    // 当 l1 l2 2条链表不为 null 或 sum不为0时,循环操作
    while (l1 || l2 || sum) {
        sum += (l1 && l1.val) + (l2 && l2.val)   //2个数值相加并加上进位,得到最终之和
        cur = cur.next = new ListNode(sum % 10)  // 给当前节点的下一个节点的值分配为 计算和(sum)的余数,然后赋值给 cur以此更新当前节点对象 cur
        
        // 更新 l1 l2 2 条链表
        l1 = l1 && l1.next
        l2 = l2 && l2.next
        //求下一次相加时的进位,如果当前之和大于10,进位为 1
        sum = Math.floor(sum / 10) 
    }
    return head.next
};

 

posted @ 2020-02-11 17:12  蛋片鸡  阅读(113)  评论(0)    收藏  举报