给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 复制代码
/** * 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) { if(l1 === null) return l2; if(l2 === null) return l1; let cur1 = l1, cur2 = l2; let isCarried = false; let cur = null, head = null; while(cur1 !== null && cur2 !== null) { let sum = cur1.val + cur2.val; sum = isCarried ? sum+1 : sum; isCarried = false; if(sum >= 10) { sum = sum % 10; isCarried = true; } let node = new ListNode(sum); if(head === null) { head = node; } if(cur === null) { cur = node; } else { cur.next = node; cur = node; } cur1 = cur1.next; cur2 = cur2.next; } let lastCur = cur1 === null ? cur2 : cur1; while(lastCur !== null) { let sum = isCarried ? lastCur.val+1 : lastCur.val; isCarried = false; if(sum >= 10) { sum = sum % 10; isCarried = true; } cur.next = new ListNode(sum); cur = cur.next; lastCur = lastCur.next; } if(isCarried) { cur.next = new ListNode(1) } return head; };