实现思路
该算法又称为龟兔快慢指针算法,即创建两个指针,fast和slow指针,slow每次走一步,fast指针每次走两步,当他们相遇了则存在环,反之fast指针到了尾部则无环。
当相遇的时候,slow指针回到头结点位置,fast指针不动。
开始第二次循环,fast和slow都每次走一步,当两个节点相遇时的节点即为环节点位置。
概念图
代码部分
def judeLoopLink(Link):
fast = Link
slow = Link
while fast !=None :
slow = slow.next
fast = fast.next
if fast is not None:
fast = fast.next
else:
return False #没环就在这里到了终点返回了
#如果有环的话一定能执行到这里
if slow == fast:#两个指针第一次相交了
slow = Link
break #将slow初始位置,结束循环开始第二次循环
while True:
slow = slow.next
fast = fast.next
if fast == slow:
return fast #当两个节点再次相交时,则这个相交位置就是环节点