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

📅  最后修改于: 2022-05-13 01:57:43.946000             🧑  作者: Mango

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

给定由两个链表表示的两个数字,编写一个返回和表的函数。和表是两个输入数相加的链表表示。不允许修改列表。此外,不允许使用显式的额外空间(提示:使用递归)。

示例

Input:
First List: 5->6->3  
Second List: 8->4->2 

Output:
Resultant list: 1->4->0->5

我们在这里讨论了一个解决方案,它适用于链表,其中最低有效位是列表的第一个节点,最高有效位是最后一个节点。在这个问题中,最高有效节点是第一个节点,最低有效数字是最后一个节点,我们不允许修改列表。这里使用递归来计算从右到左的总和。

以下是步骤。

  1. 计算给定两个链表的大小。

  2. 如果大小相同,则使用递归计算总和。将递归调用堆栈中的所有节点保持到最右边的节点,计算最右边的节点的总和并向前进位到左侧。
  3. 如果大小不同,请按照以下步骤操作:
    • 计算两个链表的大小差。让差异有所不同
    • 在更大的链表中将差异节点向前移动。现在使用步骤 2 计算较大列表的较小列表和右子列表(相同大小)的总和。此外,存储此总和的进位。
    • 计算进位的总和(在上一步中计算)与较大列表的剩余左子列表。该总和的节点被添加到上一步获得的总和列表的开头。

以下是上述方法的试运行:

下图是上述方法的实现。

Javascript


Javascript


输出:

1 0 1 7

时间复杂度: O(m+n),其中 m 和 n 是给定两个链表的大小。

迭代方法:

此实现没有任何递归调用开销,这意味着它是一种迭代解决方案。

因为我们需要从两个链表的最后一个开始添加数字。所以,这里我们将使用栈数据结构来实现这一点。

  • 我们将首先从给定的两个链表中创建两个堆栈。
  • 然后,我们将运行一个循环,直到两个堆栈都为空。
  • 在每次迭代中,我们都会跟踪进位。
  • 最后,如果进位>0,这意味着我们需要在结果列表的开头有额外的节点来容纳这个进位。

Javascript


输出:

5 8 5

相关文章:用链表表示的两个数相加 |设置 1
请参考完整的文章添加链表表示的两个数字 |设置2了解更多详情!