📅  最后修改于: 2023-12-03 15:40:46.826000             🧑  作者: Mango
链表是一种线性数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。在本程序中,我们将使用链表来表示两个数字,并编写一个函数,将它们相加并返回一个新的链表。
class ListNode {
constructor(val = 0) {
this.val = val;
this.next = null;
}
}
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
来记录进位,并在循环内部对 l1
和 l2
进行遍历。
为了计算相应节点的和,我们需要先提取 l1
和 l2
的值。如果链表已经没有下一个节点,我们就将节点的值设为 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}}}
以上程序演示了如何使用链表来表示并计算两个数字的和。您可以将其作为参考实现,以便在需要时使用。