Skip to main content

两数相加(链表版)

Tips

题目类型: LinkedList

题目

两个非空的链表, 表示两个非负的整数. 它们每位数字都是按照逆序的方式存储的, 并且每个节点只能存储一位数字. 将两个数相加, 并以相同形式返回一个表示和的链表, 两个链表都不会以 0 开头.

提示:
  • 每个链表中的节点数在范围 [1, 100]
  • 0 <= Node.val <= 9
  • 题目数据保证列表表示的数字不含前导零
示例

输入: l1 = 2 -> 4 -> 3, l2 = 5 -> 6 -> 8

输出: 7 -> 0 -> 2 -> 1

解释: 342 + 865 = 1207

题解

/**
* 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) {
const dummy = new ListNode(null)
let curr = dummy
let carry = 0

// 将 l1 和 l2 都走到头
while (l1 || l2) {
const a = l1 ? l1.val : 0
const b = l2 ? l2.val : 0
const sum = a + b + carry

carry = (sum / 10) | 0
curr.next = new ListNode(sum % 10)

if (l1) l1 = l1.next
if (l2) l2 = l2.next
curr = curr.next
}

// 如果最后 carry === 1, 说明还需要加上一位(最高位)
if (carry) curr.next = new ListNode(1)

return dummy.next
}