📌  相关文章
📜  Javascript 程序查找给定链表的最后 N 个节点的总和

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

Javascript 程序查找给定链表的最后 N 个节点的总和

给定一个链表和一个数字n 。求链表最后n 个节点的总和。
约束: 0 <= n <= 链表中的节点数。

例子:

Input : 10->6->8->4->12, n = 2
Output : 16
Sum of last two nodes:
12 + 4 = 16

Input : 15->7->9->5->16->14, n = 4
Output : 44

方法一:(使用系统调用栈的递归方式)
递归遍历链表直到结束。现在在从函数调用返回期间,将最后的n 个节点相加。总和可以累积在通过引用传递给函数或某个全局变量的某个变量中。

Javascript


Javascript


Javascript


Javascript


Javascript


输出:

Sum of last 2 nodes = 16

时间复杂度: O(n),其中 n 是链表中的节点数。
辅助空间: O(n),如果正在考虑系统调用堆栈。

方法2(使用用户定义堆栈的迭代方法)
这是本文方法 1解释的递归方法的迭代过程。从左到右遍历节点。遍历时将节点推送到用户定义的堆栈。然后从堆栈中弹出前n 个值并添加它们。

Javascript


输出:

Sum of last 2 nodes = 16

时间复杂度: O(n),其中 n 是链表中的节点数。
辅助空间: O(n),堆栈大小

方法3(反转链表)
以下是步骤:

  1. 反转给定的链表。
  2. 遍历反向链表的前n 个节点。
  3. 遍历时添加它们。
  4. 将链表反转回其原始顺序。
  5. 返回相加的总和。

Javascript


输出:

Sum of last 2 nodes = 16

时间复杂度: O(n),其中 n 是链表中的节点数。
辅助空间: O(1)

方法四(使用链表的长度)
以下是步骤:

  1. 计算给定链表的长度。让它成为len
  2. 首先,从头开始遍历(len – n)个节点。
  3. 然后遍历剩余的n 个节点,并在遍历时添加它们。
  4. 返回相加的总和。

Javascript


输出:

Sum of last 2 nodes = 16

时间复杂度: O(n),其中 n 是链表中的节点数。
辅助空间: O(1)

方法五(使用两个指针需要单次遍历)
维护两个指针——引用指针和主指针。初始化指向头的引用和主指针。首先,将引用指针从 head 移动到n 个节点,同时遍历累积节点的数据到某个变量,比如sum 。现在同时移动两个指针,直到引用指针到达列表的末尾,并在遍历时将所有节点的数据累积到引用指针指向的总和,并将所有节点的数据累积到主指针指向的某个变量,比如temp 。现在, (sum – temp)是最后n 个节点的所需总和。

Javascript


输出:

Sum of last 2 nodes = 16

时间复杂度: O(n),其中 n 是链表中的节点数。
辅助空间: O(1)

有关详细信息,请参阅有关查找给定链表的最后 n 个节点的总和的完整文章!