📅  最后修改于: 2023-12-03 15:34:31.452000             🧑  作者: Mango
在链表中查找中间节点是一种经典问题,通常需要使用多种方法来解决。在本文中,我们将介绍一种使用一次遍历方法找到链表中间节点的Python程序。
链表是由一连串节点(node)组成的数据结构,每个节点包含两部分内容:一个数据元素和一个指向下一个节点的指针。链表中的第一个节点称为头节点(head),最后一个节点称为尾节点(tail),尾节点的指针指向一个空地址(null)。
我们可以使用两个指针p1和p2来完成一次遍历寻找链表的中间节点。具体步骤如下:
下面是完整的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
因此,我们可以确定我们的程序成功地找到了链表的中间节点。