用于添加由链表表示的两个数字的 Javascript 程序 - 集 2
给定由两个链表表示的两个数字,编写一个返回和表的函数。和表是两个输入数相加的链表表示。不允许修改列表。此外,不允许使用显式的额外空间(提示:使用递归)。
示例:
Input:
First List: 5->6->3
Second List: 8->4->2
Output:
Resultant list: 1->4->0->5
我们在这里讨论了一个解决方案,它适用于链表,其中最低有效位是列表的第一个节点,最高有效位是最后一个节点。在这个问题中,最高有效节点是第一个节点,最低有效数字是最后一个节点,我们不允许修改列表。这里使用递归来计算从右到左的总和。
以下是步骤。
- 计算给定两个链表的大小。
- 如果大小相同,则使用递归计算总和。将递归调用堆栈中的所有节点保持到最右边的节点,计算最右边的节点的总和并向前进位到左侧。
- 如果大小不同,请按照以下步骤操作:
- 计算两个链表的大小差。让差异有所不同。
- 在更大的链表中将差异节点向前移动。现在使用步骤 2 计算较大列表的较小列表和右子列表(相同大小)的总和。此外,存储此总和的进位。
- 计算进位的总和(在上一步中计算)与较大列表的剩余左子列表。该总和的节点被添加到上一步获得的总和列表的开头。
以下是上述方法的试运行:
下图是上述方法的实现。
Javascript
Javascript
输出:
1 0 1 7
时间复杂度: O(m+n),其中 m 和 n 是给定两个链表的大小。
迭代方法:
此实现没有任何递归调用开销,这意味着它是一种迭代解决方案。
因为我们需要从两个链表的最后一个开始添加数字。所以,这里我们将使用栈数据结构来实现这一点。
- 我们将首先从给定的两个链表中创建两个堆栈。
- 然后,我们将运行一个循环,直到两个堆栈都为空。
- 在每次迭代中,我们都会跟踪进位。
- 最后,如果进位>0,这意味着我们需要在结果列表的开头有额外的节点来容纳这个进位。
Javascript
输出:
5 8 5
相关文章:用链表表示的两个数相加 |设置 1
请参考完整的文章添加链表表示的两个数字 |设置2了解更多详情!