寻找环的起始点
上图可以看到,如果相遇点是meet,那么fast肯定走了
2n步,slow肯定走了n步 那么此时环的大小也就是n了,如果此时在相遇点meet还有起点head重新出发两个指针,步伐为1,那么他们相遇的点就是环的起始点了
var detectCycle = function (head) {
let slow = head, fast = head
while (fast && fast.next) {
slow = slow.next
fast = fast.next.next
if (slow === fast) {
// 找到了 meet
break
}
}
// 如果不存在环,那么 fast 或者 fast.next 就是 null 了
if (fast === null || fast.next === null) return null
let start = head, reStart = fast
while (start !== reStart) {
start = start.next
reStart = reStart.next
}
return start
};