题目
实现思路
思路比较巧妙,参考剑指offer或者这里。
实现代码
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def detectCycle(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if head == None or head.next == None:
return None
fp = sp = head
# 快指针走两步,慢指针走一步,找到环
while fp and fp.next:
sp = sp.next
fp = fp.next.next
if sp == fp:
break
if sp == fp:
# 让慢指针回到起点,同时快慢指针相遇的时候就是环的入口
sp = head
while sp != fp:
sp = sp.next
fp = fp.next
return sp
return None