2. 两数相加问题

leetCode链表

# 解法一:将两数都转化成数字,相加之后转化成链表(js大数相加会有问题,这里不实现,其他语言可以用long类型实现)。

# 解法二:将在对应位置上进行相加,利用数学思维,用一个变量保存进位。

/**
 * 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) {
    let p = l1;
    let q = l2;
    let curry = 0; // 进位
    // 不动的头指针
    let head = new ListNode(-1);
    let cur = head;
    // 如果p和q有一个没有到头,就遍历
    while(p !== null || q !== null) {
        // 到头的用0来补充
        let num1 = p === null ? 0 : p.val;
        let num2 = q === null ? 0 : q.val;
        // 本位相加
        let sum = num1 + num2 + curry;
        // 下一位进位
        curry = Math.floor(sum / 10);
        // 本位数字
        let val = sum % 10;
        // 创建链表
        cur.next = new ListNode(val);
        // 循环条件
        cur = cur.next;
        p = p === null ? p : p.next;
        q = q === null ? q : q.next;
    }
    // 最后一个进位判断
    if(curry > 0) {
        cur.next = new ListNode(curry);
    }
    // 返回头指针
    return head.next;
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
更新时间: 2022-03-25 17:04