'''
有环链表,求入环节点:假设从链表头节点到入环点的距离是D,从入环点到两个指针首次相遇点的距离是S1,从首次相遇点回到入环点的距离是S2。
指针p1一次只走1步,所走的距离是D+S1
指针p2一次走2步,多走了n(n>=1)整圈,所走的距离是D+S1+n(S1+S2)
由于p2的速度是p1的2倍,所以所走的距离也是p1的2倍,因此:
2(D+S1)=D+S1+n(S1+S2),则D=(n-1)(S1+S2)+S2
'''
class Node:
def __init__(self,data = None, next = None):
self.data = data
self.next = next
#单个创建节点
node1=Node(5)
node2=Node(3)
node3=Node(7)
node4=Node(2)
node5=Node(6)
node6=Node(8)
node7=Node(1)
node1.next=node2
node2.next=node3
node3.next=node4
node4.next=node5
node5.next=node6
node6.next=node7
node7.next=node4
p1=node1
p2=node1
isFound=True
isFoundtime=0
index=0
while p2 !=None and p2.next !=None:
isFound=False
if(p1.data==node1.data and p2.data==node1.data):
p1 = p1.next
p2 = p2.next.next
continue
if(p1.data==p2.data):
#print(p1.data)
isFoundtime+=1
if(isFoundtime==1):
#index = 0
p1=node1
if(isFoundtime==2):
#print(index)
print(p1.data)
isFound=True
break
if(isFoundtime==0):
#index=index+1
p1=p1.next
p2=p2.next.next
if(isFoundtime==1):
p1=p1.next
p2=p2.next
有环链表的入环节点
最新推荐文章于 2022-03-24 16:34:30 发布