📌  相关文章
📜  用于添加由链表表示的两个数字的 Javascript 程序 - 集 2(1)

📅  最后修改于: 2023-12-03 15:27:11.969000             🧑  作者: Mango

用于添加由链表表示的两个数字的 Javascript 程序

在 JavaScript 中,我们可以使用链表来表示数字,每个节点代表一个数字的一位。为了实现两个链表相加,我们需要从它们的头开始遍历,并使用变量来保存每一步的进位和值。

算法

以下是添加两个链表的算法:

  1. 创建一个结果链表和两个指向输入列表头的指针(p 和 q)。
  2. 初始化进位 carry 为零。
  3. 遍历两个列表,直到它们的末尾。
  4. 在每一步中,将两个数字相加,加上进位 carry。
  5. 更新进位 carry 和结果链表的下一位数字。
  6. 移动指向输入列表的指针。
  7. 检查最后一步是否有进位,如果有,则添加到结果链表上。
代码

以下是 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) {
    let dummy = new ListNode(0);
    let p = l1, q = l2, current = dummy;
    let carry = 0;
    while (p !== null || q !== null) {
        let x = (p !== null) ? p.val : 0;
        let y = (q !== null) ? q.val : 0;
        let sum = carry + x + y;
        carry = Math.floor(sum / 10);
        current.next = new ListNode(sum % 10);
        current = current.next;
        if (p !== null) p = p.next;
        if (q !== null) q = q.next;
    }
    if (carry > 0) {
        current.next = new ListNode(carry);
    }
    return dummy.next;
};

该实现使用了 JavaScript 的基本类型和语法结构来创建链表、遍历列表并保存进位和值。