题解 | #链表中环的入口结点#
链表中环的入口结点
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) {
Set<ListNode> set=new HashSet<>();
boolean flag=false;
while(pHead!=null){
if(!set.add(pHead)){
flag=true;
break;
}
pHead=pHead.next;
}
return pHead;
}
}
首次重复经过的即环的入口点
快慢指针
图解
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) {
if(pHead==null)return null;
ListNode fast=pHead;
ListNode slow=pHead;
boolean flag=false;
while(fast!=null&&fast.next!=null){
fast=fast.next.next;
slow=slow.next;
if(fast==slow){
flag=true;
break;}
}
//有环
if(flag==true){
slow=pHead;
while(true){
if(fast==slow)break;
fast=fast.next;
slow=slow.next;
}
return slow;
}
return null;
}
}
#解释#
