1. 程式人生 > >[劍指offer]連結串列中環的入口結點

[劍指offer]連結串列中環的入口結點

題目描述

一個連結串列中包含環,請找出該連結串列的環的入口結點。

分析:快慢指標法,要注意測試用例中包含沒有環的情況。

程式碼:

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead)
    {
        if(pHead==NULL||pHead->next==NULL) return NULL;
		ListNode* p=pHead;
        ListNode* q=pHead;
        while(p!=NULL&&q!=NULL){
            p=p->next;
        	q=q->next->next;
            if(p==q){
                q=pHead;
        		while(p!=q){
            		p=p->next;
            		q=q->next;
        		}
                if(p==q)
                	return p;
            }
        }
        
        return NULL;
    }
};