《劍指Offer》44 鍊錶中環的入口結點

2021-09-11 06:38:06 字數 1195 閱讀 2551

題目:44. 鍊錶中環的入口結點

知識點:鍊錶

題目描述:

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。

解題思路:

解題的思路比較簡單,使用兩個快慢兩個指標,快指標一次走兩步,慢指標一次走一步,根據數學知識可得,當鍊表中存在環的時候,在環中快指標一定可以再領先慢指標一圈後與慢指標相遇,根據這個原理可以直接判斷鍊錶中是否存在環,第二步是當鍊錶存在環的時候,我們需要求得環的入口結點,根據公式可得,只需先在第一步中求得環的長度(快指標減去慢指標的步數,即慢指標的步數),相同的還是使用兩個指標,乙個指標先走環長的步數,然後兩個指標同時前移,這時當兩個指標相遇的時候,剛好是環的入口結點。

**:

//解法一(自研):

listnode* entrynodeofloop(listnode* phead)

while(p2 != nullptr && p2->next != nullptr && p1 != p2);

if(p2 == nullptr || p2->next == nullptr)

return nullptr;

p1 = phead; p2 = phead;

while(num-- > 0)

p2 = p2->next;

while(p1 != p2)

return p1;

}//解法二(劍指offer 解題思路同上):

listnode* meetingnode(listnode* phead)

return nullptr;

}listnode* entrynodeofloop(listnode* phead)

// 先移動pnode1,次數為環中結點的數目

pnode1 = phead;

for(int i = 0; i < nodesinloop; ++i)

pnode1 = pnode1->m_pnext;

// 再移動pnode1和pnode2

listnode* pnode2 = phead;

while(pnode1 != pnode2)

return pnode1;

}

劍指Offer44 鍊錶中環的入口結點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。public class listnode 思路 設定快慢指標,都從煉表頭出發,快指標每次走兩步,慢指標一次走一步,假如有環,一定相遇於環中某點 結論1 接著讓兩個指標分別從相遇點和煉表頭出發,兩者都改為每次走一步,最終相遇於...

《劍指 Offer》 44 翻轉單詞順序

字串 牛客最近來了乙個新員工 fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事 cat 對 fish 寫的內容頗感興趣,有一天他向 fish 借來翻看,但卻讀不懂它的意思。例如,student.a am i 後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是 i am ...

劍指offer44 翻轉單詞順序

牛客最近來了乙個新員工fish,每天早晨總是會拿著一本英文雜誌,寫些句子在本子上。同事cat對fish寫的內容頗感興趣,有一天他向fish借來翻看,但卻讀不懂它的意思。例如,student.a am i 後來才意識到,這傢伙原來把句子單詞的順序翻轉了,正確的句子應該是 i am a student....