先快慢指针,快慢指针相遇则说明有环。
有环后,一个从相遇的地方出发,另一个从head出发,再次相遇就是入口!
大佬的解题:https://www.nowcoder.com/questionTerminal/6e630519bf86480296d0f1c868d425ad
public ListNode detectCycle(ListNode head) {
ListNode slow=head,fast=head;
while(fast!=null&&fast.next!=null){
fast=fast.next.next;
slow=slow.next;
//相遇了!!则存在环
if(fast==slow){
ListNode slow2=head;
//一个从开始,另一个从相遇开始。如何相遇则是如何看
while(slow!=slow2){
slow=slow.next;
slow2=slow2.next;
}
return slow;
}
}
return null;
}



京公网安备 11010502036488号