Skip to content

Latest commit

 

History

History
48 lines (48 loc) · 1.54 KB

002.两数相加.md

File metadata and controls

48 lines (48 loc) · 1.54 KB

题目描述

给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

示例

输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

思路

类似数学上计算两个数相加,从链表起点开始相加,遇到大于10则进位。需要一个变量记录是否存在进位,进位参与下一个节点的求和中。

解题代码

/**
 * Definition for singly-linked list.
 * function ListNode(val) {
 *     this.val = val;
 *     this.next = null;
 * }
 */
/**
 * @param  {ListNode} l1
 * @param  {ListNode} l2
 * @return {ListNode}
 */
let addTwoNumbers = function(l1, l2) {
    let node1, node2, sum, cur, carry = 0;
    let result = new ListNode();
    let curNode = result;
    let l1Node = l1, l2Node = l2;
    while (l1Node || l2Node) {
        node1 = l1Node ? l1Node.val : 0;
        node2 = l2Node ? l2Node.val : 0;
        sum = node1 + node2 + carry;
        carry = sum > 9 ? 1 : 0;
        curNode.next = new ListNode(sum % 10);
        curNode = curNode.next;
        if (l1Node)
            l1Node = l1Node.next;
        if (l2Node)
            l2Node = l2Node.next
    }
    if (carry > 0)
        curNode.next = new ListNode(carry);
    return result.next;
}