题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
/** * * @author gentleKay * 题目描述 * 给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。 */ public class Main54 { public static void main(String[] args) { // TODO Auto-generated method stub } public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } } public ListNode EntryNodeOfLoop(ListNode pHead){ if (pHead == null || pHead.next == null) { return null; } ListNode p1 = pHead; ListNode p2 = pHead; while (p2 != null && p2.next != null) { p1 = p1.next; // 一个慢指针 p2 = p2.next.next; // 一个快指针 这样如果存在环的话一定会相遇 p1 == p2; if (p1 == p2) { p2 = pHead; // 在设置一个指针,为慢指针。 while (p1 != p2) { p1 = p1.next; p2 = p2.next; } if (p1 == p2) { //一旦他们相等 就返回 这个结点 return p1; } } } return null; } }