class Solution {
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead) {
        ListNode* p=pHead;
        while(p)
        {
            ListNode *tmp=p->next;
            if(p==tmp)
                return p;
            p->next=p;
            p=tmp;
        }
        return NULL;
    }
};
class Solution {
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead) {
        ListNode* slow=pHead,*fast=slow;
        //使用快慢指针
        if(slow==slow->next)
            return slow;
        if(!slow->next)
            return NULL;
        while(slow&&fast&&fast->next)
        {
            slow=slow->next;
            fast=fast->next->next;
           if(slow==fast)
               break;
        }
        if(fast==NULL)
            return NULL;
        ListNode* p=pHead;
        while(p!=slow)
        {
            p=p->next;
            slow=slow->next;
         }
         return p;
    }
};

图片说明