题解 | #链表中环的入口结点#
链表中环的入口结点
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; } }#解释#