题目链接:
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
算法思想:
在环形链表hot100:25环形链表-CSDN博客这篇博客中,我们解决了如何判断一个链表有环,即快慢指针相遇的地方就证明链表有环,那么如何找到环的入口点呢?这里先给出结论相遇点到入口点的距离等于起始点到入口点的距离,此时只需要让head和slow或者fast(因为此时slow和fast相遇了)其中一个指针同时遍历即可,相遇的地方就是环保的入口,证明如下:
public ListNode detectCycle(ListNode head) {ListNode slow = head;ListNode fast = head;while(fast != null && fast.next != null) {slow = slow.next;fast = fast.next.next;if(slow == fast) {//首次相遇 说明有环(相遇点到入口点的距离等于起始点到入口点的距离,可证明)while(head != slow) {head = head.next;slow = slow.next;}return head;}}return null;}