142. Linked List Cycle II
题目链接: https://leetcode.com/problems/linked-list-cycle-ii/description/
题目
Given a linked list, return the node where the cycle begins. If there is no cycle, return null.
分析
这道题知乎面试的时候问到了,当时比较蠢,以为这个问题很复杂….
现在回头来看其实非常简单,p1是慢指针,p2是快指针。
p1每次走一步,p2每次走两步
如果有环的话,那么p1迟早会和p2相遇的。
- 假定
假定:相遇的时候,p1已经走了k步,那p2就已经走了2k步
没入环之前走了a步
p1肯定是第一环都没走完(假定已经走了m步吧)
p2已经走了 r(环长) + m 只能是一圈,这里可以想想
- 整理一下
p1 -> a + m = k
p2 -> a + r +m = 2k
-> a = r - m
所以从起点开始到 入环点的距离,跟相遇点到入环点的距离相同。
1 | class Solution { |
142. Linked List Cycle II