使用 C++ 中的类将两个由链表表示的数字相加

2024 年 8 月 28 日 | 3 分钟阅读

以下代码是在 C++ 中将两个由链表表示的数字相加的实现。在此实现中,输入的链表假定以反向表示数字,即最低有效位位于链表的头部。该实现首先为链表节点定义一个结构。每个节点都有一个整数值和指向列表中下一个节点的指针。该实现还定义了一个名为 addTwoNumbers 的函数,该函数将指向输入链表头部的两个指针作为参数,并返回指向结果链表头部的指针。

C++ 代码

输出

7 0 8
The result id due to formation:
Input:
l1: 2 -> 4 -> 3
l2: 5 -> 6 -> 4
Internal Working Output:
7 -> 0 -> 8
This represents the sum 342 + 465 = 807.

说明

addTwoNumbers 函数首先创建一个虚拟节点作为结果链表的头部。虚拟节点的值初始化为 0,其 next 指针设置为 NULL。该函数还初始化一个名为 curr 的指针,指向虚拟节点。然后,该函数开始遍历两个输入链表以及前一个加法产生的任何进位。在每次迭代中,它计算两个输入链表的当前数字和进位的总和,并在结果链表中创建一个新节点,其值为总和的最低有效位。下一次迭代的进位设置为总和的最高有效位。

该函数继续迭代,直到两个输入链表和任何进位都耗尽。此时,结果链表已完成,函数返回指向其头部的指针。在 main 函数中,该实现创建两个输入链表并调用 addTwoNumbers 函数来计算它们的和。然后它遍历结果链表并打印出其节点的值。总的来说,该实现是解决 C++ 中将两个由链表表示的数字相加问题的直接而高效的解决方案。它利用了输入链表已经按逆序排列的事实来简化加法操作的逻辑。它还使用虚拟节点作为结果链表的头部来简化边缘情况的处理。

我们首先创建一个虚拟节点作为新链表的头部。我们还创建一个指向 curr 的指针,该指针指向我们正在添加到新链表的当前节点。我们将 carry 初始化为 0,它将保存前一个加法产生的任何进位。我们遍历两个链表和进位,添加相应的值和前一个加法产生的进位。

如果其中一个链表比另一个短,我们将其缺失的节点视为值为 0。我们创建一个新节点,其值为总和模 10(因为两位数的最大和是 9 + 9 = 18),并将进位设置为总和除以 10。我们将 curr 移动到新创建的节点。最后,我们返回虚拟节点之后的下一个节点。