文章目录
141
思路
快慢指针,慢的每次走一步,快的每次走两步,若能相遇说明该存在环
class Solution(object):
def hasCycle(self, head):
"""
:type head: ListNode
:rtype: bool
"""
if not head or not head.next:
return False
fast = head
slow = head
while slow and fast and fast.next:
slow = slow.next
fast = fast.next.next
if fast == slow:
return True
return False
142进阶:找到环的入口点
思路
借鉴141题,同样建立快慢指针,当快慢指针第一次相遇时,慢指针不变,快指针回头节点,然后快慢指针一起每次走一步,再次相遇时就是环的入口节点,如果循环结说明不存在环,返回None。
class Solution(object):
def detectCycle(self, head):
"""
:type head: ListNode
:rtype: ListNode
"""
if not head or not head.next:
return None
slow = fast = head
while slow and fast and fast.next:
slow = slow.next
fast = fast.next.next
if fast == slow:
fast = head
while fast != slow:
slow = slow.next
fast = fast.next
return fast
return None