题目描述
给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。
代碼
/*
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) return null;
ListNode fast = pHead;
ListNode slow = pHead;
boolean flag = false;
// 判断是否有环
while(fast!=null&&fast.next!=null){
slow = slow.next;
fast = fast.next.next;
if(slow == fast){
flag = true;
break;
}
}
// 无环则返回值
if(flag == false) return null;
int count = 1;
// 计算环中的节点个数
ListNode temp = fast;
while(temp.next!=fast){
temp = temp.next;
count++;
}
// 再移动
temp = pHead;
for(int i=0; i<count; i++){
temp = temp.next;
}
//
ListNode temp2 = pHead;
while(temp != temp2){
temp = temp.next;
temp2 = temp2.next;
}
return temp;
}
}