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

📅  最后修改于: 2023-12-03 14:46:46.898000             🧑  作者: Mango

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

简介

在本文中,我们将介绍如何使用Python编写一个程序,以查找给定链表的最后N个节点的总和。

在链表中,每个节点包含一个值和一个指向下一个节点的指针。我们可以使用链表来表示和操作具有动态长度的数据集。

算法思路

为了找到最后N个节点的总和,我们将使用双指针技巧。我们将维护两个指针,一个指向链表的开头,另一个指向第N个节点。然后,我们同时向前移动这两个指针,直到第二个指针到达链表的末尾。此时,第一个指针指向倒数第N个节点,我们可以从这里开始计算总和。

代码示例

以下是用于查找最后N个节点总和的Python代码片段:

class Node:
    def __init__(self, value):
        self.value = value
        self.next = None

def calculate_last_n_nodes_sum(head, n):
    slow = fast = head

    # 移动第二个指针,使其与第一个指针相隔N个节点
    for _ in range(n):
        if fast is None:
            return None
        fast = fast.next

    # 同时向前移动第一和第二个指针,直到第二个指针到达链表末尾
    while fast is not None:
        slow = slow.next
        fast = fast.next

    # 计算倒数第N个节点的总和
    total_sum = 0
    while slow is not None:
        total_sum += slow.value
        slow = slow.next

    return total_sum

# 示例用法
# 创建链表: 1 -> 2 -> 3 -> 4 -> 5
head = Node(1)
head.next = Node(2)
head.next.next = Node(3)
head.next.next.next = Node(4)
head.next.next.next.next = Node(5)

n = 2  # 查找倒数第N个节点的总和
result = calculate_last_n_nodes_sum(head, n)
print(f"The sum of last {n} nodes is {result}")
解释代码
  1. 首先,我们定义了一个节点类(Node),它有一个value属性和一个指向下一个节点的指针(next)。
  2. calculate_last_n_nodes_sum函数使用了双指针技巧,首先初始化两个指针(slow和fast)为链表的开头。
  3. 接下来,我们移动第二个指针(fast)N个节点的距离。
  4. 然后,我们同时向前移动第一和第二个指针,直到第二个指针到达链表末尾。此时,第一个指针(slow)指向倒数第N个节点。
  5. 最后,我们计算倒数第N个节点以及其后的节点的值的总和,并将其返回。
示例

在示例中,我们创建了一个链表: 1 -> 2 -> 3 -> 4 -> 5。然后,我们使用calculate_last_n_nodes_sum函数查找倒数第2个节点的总和。最后,我们将结果打印到控制台上。

输出结果如下所示:

The sum of last 2 nodes is 9
结论

通过本文,我们学习了如何使用Python编写程序来查找给定链表的最后N个节点的总和。这是一个常见的链表问题,通过双指针技巧,我们可以在O(N)的时间复杂度内解决该问题。