思路
a:表头到入环点,不包含入环点
b:环的长度,包含入环点
1.第一次相遇,p2 = nb
2.a+nb === 入环点
3.p1 = head 再走a步就到入环点
4.由上面条件得出,起始距离入口 = a + 第一次相遇位置(nb)
代码
var detectCycle = function(head) {
if (head === null) {
return null;
}
let p1 = head, p2 = head;
while (p2 && p2.next) {
p1 = p1.next;
p2 = p2.next.next;
if (p2 === p1) {
p1 = head;
while (p1 !== p2) {
p1 = p1.next;
p2 = p2.next;
}
return p1;
}
}
return null;
};
复杂度
时间:O(n)
空间: O(1)