如何通過C 求出鍊錶中環的入口結點

2022-09-21 08:39:09 字數 840 閱讀 9796

目錄

給乙個長度為n鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,返回null。

資料範圍: n≤10000,1<=結點值<=10000

要求:空間複雜度 o(1),時間複雜度 o(n)

例如,輸入,時,對應的環形鍊錶如下圖所示:

可以看到環的入口結點的結點值為3,所以返回結點值為3的結點。

輸入分為2段,第一段是入環前的鍊錶部分,第二段是鍊錶環的部分,後台程式設計客棧會根據第二段是否為空將這兩段組裝成乙個無環或者有環單鏈表

返回鍊錶的環的入口結點即可,我們後台程式會列印這個結點對應的結點值;若沒有,則返回對應程式語言的空結點即可。

輸入:,

返回值:

說明:返回環形鍊錶入口結點,我們後台程式會列印該環形鍊錶入口結點對應的結點值,即3

本題考察資料結構鍊錶的使用,有兩種解法。

解法一:雜湊set

/*struct listnode

};*/

class solution

else

}return nullptr;}};

解法二:快慢雙指標

/*struct listnode

};*/

class solution

// 若指向空指標,說明沒有形成閉路

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

return nullptr;

// 將快指標指向頭

fast = phead;

// 當他倆相遇時,就是環形鍊錶入口處

while(fast != slow)

return fast;}};

鍊錶中環的入口

題目描述 給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。思路 之前我們判斷鍊錶是否有環,用兩個指標,快慢指標,乙個走一步,乙個走兩步,在此基礎上,當兩個指標相遇,此時肯定在環中,那麼接著計算環的節點數,就利用相遇節點往前走,直到在次回到相遇點,即可計算環的節點數n,然後利...

鍊錶 鍊錶中環的入口結點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。知識點回顧 快慢指標 思路 使用快慢指標 假設有p,q兩指標,p每步跨乙個結點,q每步跨兩個結點。那麼經過k步之後q比p多走過的結點數為k。如果鍊錶中沒有環,那麼q永遠在p的前面,兩指標不會相遇。如果鍊錶有環,且環中結點個數為...

鍊錶 鍊錶中環的入口結點

給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null 鍊錶中某些結點構成了乙個環,找打環的入口結點 head a1 a2 a3.使用雙層迴圈,例如對於結點a1,遍歷整個鍊錶判斷是否有a1 head next head head next a2,a3,an 依次 測試報錯,沒通過 ...