链表中环的入口结点

2020-07-24  本文已影响0人  Crazy_Bear
/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead)
    {
         ListNode *p,*q,*tmp;
        p=MeetNode(pHead);
        if(!p) return NULL;
        tmp=p;
        p=p->next;
        int count=1;
        while(p!=tmp)
        {
            count++;
            p=p->next;
        }
        p=pHead;
        for(int i=0;i<count;i++)
        p=p->next;
        q=pHead;
         while(p!=q)
        {
            p=p->next;
            q=q->next;  
        }
        return p;
    }
    
     ListNode* MeetNode(ListNode* pHead)
     {
        if(!pHead) return NULL;
        ListNode* p=pHead,*q=pHead->next;
        while(p&&q)
        {
           
            if(p==q) return p;
            p=p->next;
            if(q->next)
            q=q->next->next;
        }
       return NULL;
     }
};
上一篇 下一篇

猜你喜欢

热点阅读