链表中环的入口结点
题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出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;
}
}

浙公网安备 33010602011771号