题目:
吐槽:有一个结论,用数学公式推导出来的,后来也就记住了。当判断快慢指针相交后,将快指针重新指回head处,然后跟慢指针一起一步一步的走,再次相等的点便是成环点。
代码:
public ListNode detectCycle(ListNode head) {
ListNode low = head;
ListNode fast = head;
while(fast!=null&&fast.next!=null){
low = low.next;
fast = fast.next.next;
//进入判断之前,使查找是否是有环的链表
if(low == fast){
//判断成环后,将快指针放在第一个节点处,让快慢指针一步一步前进,当相等的时候便是成环的点。
fast = head;
while(true){
if(low == fast){
return low;
}
low = low.next;
fast = fast.next;
}
}
}
return null;
}