Skip to content
On this page

2. 两数相加

原题链接:LeetCode 2. 两数相加

题目描述

给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。

请你将两个数相加,并以相同形式返回一个表示和的链表。

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

示例 1:

**输入:**l1 = [2,4,3], l2 = [5,6,4] 输出:[7,0,8] **解释:**342 + 465 = 807.

示例 2:

**输入:**l1 = [0], l2 = [0] 输出:[0]

示例 3:

**输入:**l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9] 输出:[8,9,9,9,0,0,0,1]

提示:

- 每个链表中的节点数在范围 `[1, 100]` 内

- `0 <= Node.val <= 9`

- 题目数据保证列表表示的数字不含前导零

难度: Medium


题解代码

javascript
/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} l1
 * @param {ListNode} l2
 * @return {ListNode}
 */
var addTwoNumbers = function(l1, l2) {
    const toNumber = link => {
        let arr = []
        let ele = {
            next: link
        }
        while(ele.next) {
            arr.push(ele.next.val)
            ele.next = ele.next.next
        }
        return BigInt(arr.reverse().join(''))
    }
    const toLinkList = total => {
        const arr = total.toString().split('')
        let head = new ListNode(arr.pop())
        let next = head
        while (arr.length) {
            next.next = new ListNode(arr.pop())
            next = next.next
        }
        return head
    }
    const total = toNumber(l1) + toNumber(l2)
    return toLinkList(total)
};

var addTwoNumbers = function (l1, l2) {
    const preHead = new ListNode()
    let more = 0
    let p = preHead
    while(l1 && l2) {
        const val = l1.val + l2.val + more
        more = val > 9 ? 1 : 0
        l1.val = val % 10
        p.next = l1
        l1 = l1.next
        l2 = l2.next
        p = p.next
    }
    if (!l1 && !l2) {
        if (more) p.next = new ListNode(1)
    } else if (l1 || l2){
        p.next = l1 || l2
        while (p.next) {
            const val = p.next.val + more
            more = val > 9 ? 1 : 0
            p.next.val = val % 10
            p = p.next
        }
        if (more) p.next = new ListNode(1)
    }
    return preHead.next
}

技术文档集合