双指针p1和p2,p1每次+1.p2每次+2,则p1必然会与p2相遇,且此时p1走了nb,p2走了a+nb,b为环长,只要让p1再走a步,就到了入口,因此让p2回到起点,再次以相同速度行走,则p1.p2相遇的位置就是环入口。
class Solution(object):
def detectCycle(self, head):
fast, slow = head, head
while True:
if not (fast and fast.next): return
fast, slow = fast.next.next, slow.next
if fast == slow: break
fast = head
while fast != slow:
fast, slow = fast.next, slow.next
return fast