1.为什么不能用while{},而是用do{}while,因为初始化fast=slow,所以不会进入循环 2.为什么加上if(fast==null||fast.next==null) { return null; //由于如果fast指向空指针说明链表不是一个环。 }
public class Solution {
public ListNode EntryNodeOfLoop(ListNode pHead) {
//使用快慢指针
ListNode fast=pHead;
ListNode slow=pHead;
do
{
if(fast==null||fast.next==null)
{
return null;
}
fast=fast.next;
fast=fast.next;
slow=slow.next;
} while(fast!=slow);
fast=pHead;
while(fast!=slow)
{
fast=fast.next;
slow=slow.next;
}
return fast;
}
}