每天一道leetcode(Day 3)


2. 两数相加

题目描述

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

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

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

示例

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

解题思路

因为是逆序,所以从表头也就是数字的个位开始相加,如果两数相加大于等于 10 则先后向后进位,用 carry 变量表示进位,如果一个链表已经加完了,不足的位数用 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 node = new ListNode("head");
  let temp = node,
    sum,
    carry = 0;
  while (l1 || l2) {
    const val1 = l1 ? l1.val : 0;
    const val2 = l2 ? l2.val : 0;
    sum = val1 + val2 + carry;
    temp.next = new ListNode(sum % 10);
    temp = temp.next;
    carry = parseInt(sum / 10);
    if (l1) l1 = l1.next;
    if (l2) l2 = l2.next;
  }
  if (carry > 0) temp.next = new ListNode(carry);
  return node.next;
};

参考

2. 两数相加


文章作者: CassielLee
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 CassielLee !
评论
  目录