📜  Python程序使用一次遍历找到链表的中间(1)

📅  最后修改于: 2023-12-03 15:34:31.452000             🧑  作者: Mango

Python程序使用一次遍历找到链表的中间

在链表中查找中间节点是一种经典问题,通常需要使用多种方法来解决。在本文中,我们将介绍一种使用一次遍历方法找到链表中间节点的Python程序。

链表基础知识

链表是由一连串节点(node)组成的数据结构,每个节点包含两部分内容:一个数据元素和一个指向下一个节点的指针。链表中的第一个节点称为头节点(head),最后一个节点称为尾节点(tail),尾节点的指针指向一个空地址(null)。

程序实现

我们可以使用两个指针p1和p2来完成一次遍历寻找链表的中间节点。具体步骤如下:

  1. 定义两个指针p1和p2,初始值均指向链表的头节点。
  2. 使用while循环遍历整个链表,当p2指针到达链表末尾时,p1指针所指向的节点即为链表的中间节点。

下面是完整的Python程序实现:

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def findMiddle(head: ListNode) -> ListNode:
    p1, p2 = head, head
    while p2 and p2.next:
        p1 = p1.next
        p2 = p2.next.next
    return p1

注意,我们首先定义了一个ListNode类,它包含了一个数据元素val和一个指向下一个节点的next指针。然后我们定义了一个名为findMiddle的函数,该函数接受一个链表的头节点作为输入,并返回链表的中间节点。

在函数的内部,我们初始化了两个指针p1和p2,并将它们的初始值都设置为头节点。然后我们使用while循环遍历整个链表,当p2指针到达链表末尾时,p1指针所指向的节点即为链表的中间节点。最后,我们返回p1指针所指向的节点即可。

测试程序

为了验证我们的程序能够正确地找到链表的中间节点,我们可以编写一个测试程序。下面是一个示例程序:

if __name__ == "__main__":
    node1 = ListNode(1)
    node2 = ListNode(2)
    node3 = ListNode(3)
    node4 = ListNode(4)
    node5 = ListNode(5)

    node1.next = node2
    node2.next = node3
    node3.next = node4
    node4.next = node5

    print(findMiddle(node1).val)

在这个程序中,我们创建了一个包含5个元素的链表,并通过调用findMiddle函数,输出了链表的中间节点。运行该程序,得到的输出结果为:

3

因此,我们可以确定我们的程序成功地找到了链表的中间节点。