Typescript-Algorithms
    Preparing search index...

    Variable add_two_numbersConst

    add_two_numbers: (l1: null | ListNode, l2: null | ListNode) => null | ListNode = addTwoNumbers

    2.两数相加

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

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

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


    示例1

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


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


    输入: 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
    • 题目数据保证列表表示的数字不含前导零

    Type declaration

      • (l1: null | ListNode, l2: null | ListNode): null | ListNode
      • Definition for singly-linked list. class ListNode { val: number next: ListNode | null constructor(val?: number, next?: ListNode | null) { this.val = (val===undefined ? 0 : val) this.next = (next===undefined ? null : next) } }

        Parameters

        • l1: null | ListNode
        • l2: null | ListNode

        Returns null | ListNode

    • 设计一个虚拟头节点,然后遍历两个链表,不断往虚拟头节点后面插入新节点。
    • 只要l1或者l2不为空,就继续遍历。同时计算sum = l1.val + l2.val + carry。如果l1或者l2为空,则用0代替。
    • 计算sum % 10作为新节点的val,计算sum / 10作为进位carry。
    • 如果l1不为空,则l1 = l1.next。如果l2不为空,则l2 = l2.next。
    • 如果carry大于0,则再插入一个新节点,val为carry。
    • 返回虚拟头节点的next。
    /**
    * Definition for singly-linked list.
    * class ListNode {
    * val: number
    * next: ListNode | null
    * constructor(val?: number, next?: ListNode | null) {
    * this.val = (val===undefined ? 0 : val)
    * this.next = (next===undefined ? null : next)
    * }
    * }
    */

    function addTwoNumbers(l1: ListNode | null, l2: ListNode | null): ListNode | null {
    const dummy = new ListNode(-1);
    let tail = dummy;
    let carry = 0;

    while (l1 || l2) {
    let sum = (l1?.val ?? 0) + (l2?.val ?? 0) + carry;
    carry = Math.floor(sum / 10);

    tail.next = new ListNode(sum % 10);
    tail = tail.next;

    if (l1) {
    l1 = l1.next;
    }

    if (l2) {
    l2 = l2.next;
    }
    }

    if (carry > 0) {
    tail.next = new ListNode(carry);
    }

    return dummy.next;
    };