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

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

JavaScript程序:添加由链表表示的两个数字

链表是一种线性数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在本程序中,我们将使用链表来表示两个数字,并编写一个函数,将它们相加并返回一个新的链表。

实现步骤
  1. 创建一个链表节点类,包含当前节点的值和指向下一个节点的指针:
class ListNode {
  constructor(val = 0) {
    this.val = val;
    this.next = null;
  }
}
  1. 编写一个函数 addTwoNumbers,接收两个链表作为输入参数,并返回它们的和的链表:
function addTwoNumbers(l1, l2) {
  let carry = 0;
  const dummy = new ListNode();
  let cur = dummy;

  while (l1 || l2 || carry) {
    const v1 = l1 ? l1.val : 0;
    const v2 = l2 ? l2.val : 0;
    const sum = v1 + v2 + carry;
    carry = Math.floor(sum / 10);
    cur.next = new ListNode(sum % 10);
    cur = cur.next;

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

  return dummy.next;
}

在函数中,我们将创建一个 dummy 节点来汇总最终结果,并初始化当前指针 cur 指向 dummy。同时,我们用变量 carry 来记录进位,并在循环内部对 l1l2 进行遍历。

为了计算相应节点的和,我们需要先提取 l1l2 的值。如果链表已经没有下一个节点,我们就将节点的值设为 0。然后将它们的总和(加上进位 carry)计算出来,并将最后一位的值添加到结果链表中。

如果相加时发生进位,我们就需要将 carry 设置为 1,以便在下一个循环迭代中将其加入总和中。

最后,我们返回 dummy.next,它指向了链表的第二个节点,也就是加法结果。

示例

以下是一个示例输入和输出:

const l1 = new ListNode(2);
l1.next = new ListNode(4);
l1.next.next = new ListNode(3);

const l2 = new ListNode(5);
l2.next = new ListNode(6);
l2.next.next = new ListNode(4);

console.log(addTwoNumbers(l1, l2));   // 输出: ListNode {val: 7, next: ListNode {val: 0, next: ListNode {val: 8, next: null}}}

以上程序演示了如何使用链表来表示并计算两个数字的和。您可以将其作为参考实现,以便在需要时使用。