題目分析見這裏
class Solution:
# @param head, a ListNode
# @return a list node
def detectCycle(self, head):
if None == head or None == head.next:
return None
pfast = head
pslow = head
#找第一次相遇的點,若存在環路,則肯定會相遇
while pfast and pfast.next:
pfast = pfast.next.next
pslow = pslow.next
if pslow == pfast: break
if pslow != pfast:
return None
#pfast從頭開始,則下次相遇的點就是循環開始的點
pfast = head
while True:
if pfast == pslow:
return pfast
pfast = pfast.next
pslow = pslow.next