解答:要想得知链表环开始的地方,需要先判断链表是否有环(参考本博客Linked List Cycle),当判断为有环时,记住当前所指的位置,将其中一个指针重置到链表头部,两个指针开始以相同步长1往后遍历链表,当再次相遇时,即环开始的地方
class Solution:
# @param head, a ListNode
# @return a list node
def detectCycle(self, head):
if head == None or head.next == None:
return None
slow = fast = head
while fast and fast.next:
slow = slow.next
fast = fast.next.next
if fast == slow:
break
if slow == fast:
slow = head
while slow != fast:
slow = slow.next
fast = fast.next
return slow
return None