##题目描述
一个链表中包含环,请找出该链表的环的入口结点。
##解题思路
1,使用快慢指针找到碰撞点
2,两个同速指针分别从头节点和碰撞点出发,相遇的地方就是入口节点
##代码实现
/** * */ package 链表; /** * <p> * Title:EntryNodeOfLoop * </p> * <p> * Description: * </p> * * @author 田茂林 * @data 2017年8月23日 上午9:25:08 */ public class EntryNodeOfLoop { public ListNode NodeEntryNodeOfLoop(ListNode pHead) { if (pHead == null) { return null; } // 先找到碰撞点,两个指针出发,一快一慢 ListNode fast = pHead; ListNode slow = pHead; if (fast == null || fast.next == null) { return null; //因为下边的循环要用到fast.next,所以不能为null } while (fast != null) { //因为函数体里没有用到fast.next做判断,只有赋值操作,所以不需要对其做非空判断。 fast = fast.next.next; slow = slow.next;//slow的速度比fast慢,所以不用判断slow是否非空 if (fast == slow) break; } // 速度一样的两个指针一个从pHead出发,一个从碰撞点出发,相遇的地方就是入口节点 slow = pHead; while (slow != fast) { slow = slow.next; fast = fast.next; } return slow; } }