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

【劍指offer】連結串列中環的入口結點

時間限制:1秒 空間限制:32768K 熱度指數:32723

本題知識點: 連結串列

題目描述

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

思路:兩個指標,p1在後,p2在前,p1斷開連結串列,然後p1和p2不斷往前走。當p2為空(因為之前被斷開了),表明p1回到了環的入口。

/*
struct ListNode {
    int val;
    struct ListNode *next;
    ListNode(int x) :
        val(x), next(NULL) {
    }
};
*/
class Solution {
public:
    ListNode* EntryNodeOfLoop(ListNode* pHead)
    {
        if(pHead->next == NULL)
            return NULL;
        
        ListNode* p1 = pHead;
        ListNode* p2 = pHead->next;
        
        while(p2)
        {
            p1->next = NULL;
            p1 = p2;
            p2 = p2->next;            
        }
        
        return p1;
    }
};