参考链接:https://blog.csdn.net/yangnianjinxin/article/details/79025768
上面这个博客的链接有详细的叙述过程,讲得很好。
# -*- coding:utf-8 -*-
class Node(): # 定义一个Node类,构造两个属性,一个是item节点值,一个是节点的下一个指向
def __init__(self, item=None):
self.item = item
self.next = None
def findbeginofloop(head):
slow = head
fast = head
loopExist = False # 默认环不存在,为False
if head == None:
return False
#判断环是否存在
while slow and fast and fast.next != None and fast.next.next != None:
slow = slow.next
fast = fast.next.next
if slow == fast:
loopExist = True
print("存在环结构")
break
#这个时候fast是在相交的地方
if loopExist == True:
slow = head
while slow != fast:
fast = fast.next
slow = slow.next
return slow
print("不存在环结构")
return False
if __name__ == "__main__":
node1 = Node(1)
node2 = Node(2)
node3 = Node(3)
node4 = Node(4)
node5 = Node(5)
node6 = Node(6)
node1.next = node2
node2.next = node3
node3.next = node4
node4.next = node5
node5.next = node6
node5.next = node2
node6.next = node3
print(findbeginofloop(node1).item)