class LinkNode():
def __init__(self,value = None):
self.value = value
self.next = None
def Creat_Link_Tail(lst):
L = LinkNode(lst[0])
first_node = L
for i in range(1, len(lst)):
if type(lst[i]) == int:
p = LinkNode(lst[i])
L.next = p
L = p
else:
p = LinkNode(lst[i][0])
L.next = p
L = p
for j in range(1, len(lst[i])):
c = LinkNode(lst[i][j])
L.next = c
c.next = p
L = c
return first_node
# 快慢指针
class solution():
def EntryNodeOf_Loop(self,lhead):
slow = lhead
fast = lhead
while fast != None and fast.next != None:
fast = fast.next.next
slow = slow.next
if slow == fast:
while lhead != slow:
lhead = lhead.next
slow = slow.next
return slow.value
return None
if __name__ == '__main__':
lst = [1,2,3,[4,5,6,7]]
lhead = Creat_Link_Tail(lst)
solution = solution()
res = solution.EntryNodeOf_Loop(lhead)
print(res)
python求链表中的循环头节点(快慢指针方法)
于 2022-01-22 23:46:03 首次发布