Given a linked list, return the node where the cycle begins. If there is no cycle, return null.
Note: Do not modify the linked list.
Follow up:
Can you solve it without using extra space?
Subscribe to see which companies asked this question
题意:查找环形链表的环的起点
思路:类似于141,快慢指针法可判断环的存在与否
设头结点到环的起点距离为a,环的起点到第一次相遇点距离为b,第一次相遇点到环的起点距离为c,则第一次相遇快指针走了(a+b+c+b),慢指针走了(a+b),快指针速度是慢指针的两倍,则可得a=c。所以将快指针置于链表开头,慢指针仍在相遇点,二者同时同速走,则相遇点就是环的起点
注意判断两指针是否相等,不是判断两指针的值是否相等
Runtime: 76 ms
# 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):
dummy=ListNode(0)
dummy.next=head
slow=fast=dummy
while fast.next and fast.next.next:
slow=slow.next
fast=fast.next.next
if slow==fast:
fast=dummy
while slow!=fast:
slow=slow.next
fast=fast.next
return slow
return None