1 图解
2 代码及分析
这里说一说为什么步数设置为一步和两步?
1、首先,快的必须是慢的两倍速才能保证在慢的第一圈出来之前就追上,所以speedFAST >= 2 * speedSLOW
2、其次,由于是离散的情况,所以不是说只要快指针比满指针速度快就可以了,比如说1:3,就会出现运行超时的情况,快指针刚好越过慢指针
3、但是2:4或者3:6是可以的,且消耗的运行内存相同。首先,快慢指针的距离是由于进入环形之前造成的,那么这个距离就一定是2的倍数或3的倍数,所以在环形中追逐的过程中,每次距离缩小也是2的倍数或者3的倍数,不会出现越过的情况
# 正常版,一步和两步
class ListNode:
def __init__(self, x):
self.val = x
self.next = None
class Solution:
def detectCycle(self, head: ListNode) -> ListNode:
slow, fast = head, head
while fast and fast.next:
slow = slow.next
fast = fast