鏈表中環的入口結點

題目描述

給一個鏈表,若其中包含環,請找出該鏈表的環的入口結點,不然,輸出null。
 
思路:
利用快慢指針,先循環找到快慢指針值相等的位置;再將慢指針重置到頭部,和快指針一塊兒移動,但此次快慢指針都每次只移動一個位置。
 
代碼以下:
/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead)
    {
        if(pHead==NULL)
            return NULL;
        ListNode * p, * q;
        p=pHead,q=pHead;
        while(q!=NULL&&q->next!=NULL)
        {
            p=p->next;
            q=q->next->next;
            if(p==q)
                break;
        }
        if(q==NULL||q->next==NULL)
            return NULL;
        p=pHead;
        while(p!=q)
        {
            p=p->next;
            q=q->next;
        }
        return p;
    }
};
相關文章
相關標籤/搜索