public class Solution { public ListNode EntryNodeOfLoop(ListNode pHead) { //定义快慢指针,第一次相遇的时候走的差距就是环的大小,然后将f指针移到头节点再次进行遍历再次相遇的位置就是入口节点 if(pHead==null){ return null; } ListNode s = hasCycle(pHead); ListNode f = pHead; if(s==null){ return null;//无环 } while(f!=s){ f = f.next; s = s.next; } return s; } public ListNode hasCycle(ListNode head){ ListNode f = head; ListNode s = head; while(f!=null && f.next!=null){ f = f.next.next; s = s.next; if(s==f){ return s; } } return null; } }