题目描述:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
思路分析:1.首先判断链表中是否有环:可以使用两个指针来解决,定义两个指针,一个指针一次走1步,一个指针走2步,如果走的快的指针追上了走的慢的指针,那么链表就包含环;
2.找到环的入口:如果有环,那么快慢指针会相遇在一个结点,此时让快的指针指向头指针,快慢指针同时重新移动,当两个再次相遇时便是环的入口点。
代码实现:
/* 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||pHead.next==null) { return null; } ListNode fast = pHead.next.next; ListNode slow = pHead.next; //判断是否有环 while(fast!=slow) { if(fast.next.next!=null&&slow.next!=null) { fast = fast.next.next; slow = slow.next; }else{ return null; } } //寻找环的入口结点 fast = pHead; while(fast!=slow) { fast = fast.next; slow = slow.next; } return slow; } }