题解 | #链表中环的入口结点#
链表中环的入口结点
https://www.nowcoder.com/practice/253d2c59ec3e4bc68da16833f79a38e4
import java.util.*;
/*
public class ListNode {
int val;
ListNode next = null;
ListNode(int val) {
this.val = val;
}
}
*/
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead) {
//1.设置一个快2步一个慢指针1步;
ListNode fast = pHead;
ListNode slow = pHead;
ListNode ans= pHead;//开始时不出发,前两个相遇再出发
int out=0;
//2.在第一次相遇的时候,此时从head处新出发一个指针
//这里有个bug,如果fast为null,那么fast.next是有问题的,会报错,需要注意
while(fast.next!=null&&out!=1)
{
fast=fast.next.next;
if(fast==null)
break;
System.out.println(fast==null);
slow=slow.next;
if(slow==fast && fast!=null)
{
while(ans!=slow)
{
slow=slow.next;
ans=ans.next;
}
out=1;
}
}
//若没有环则返回空
if(out==0)
{
return ans=null;
}
//3.两个慢指针相遇的时刻,就是入口
return ans;
}
}


海康威视公司福利 1139人发布