程式設計師面試金典第二章 鍊錶(6) 鍊錶環路

2021-07-25 21:54:15 字數 421 閱讀 1931

1.1 問題描述

給定乙個鍊錶,判斷該鍊錶是否有環路,如果有,就返回鍊錶環路開始的結點,如果沒有,返回nullptr
1.2 解題思路

思路1:判斷鍊錶是否有環路,通常採用快慢指標法,所謂快慢指標法的意思是,有兩個指標,乙個一次走2步,這個是快指標,另乙個一次走1步,這個是慢指標。假設鍊錶有環,那麼快指標一定可以追上慢指標。

判斷完有環,那麼重新宣告乙個指向開頭的指標,與慢指標一樣,每次只走一步,它們相遇的地方就是環路的起點。具體解釋見

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

class

listloop

return p;}}

return nullptr;

}};

程式設計師面試金典 鍊錶

這裡我們可以使用乙個表來記錄訪問過的節點值,這樣只要一次遍歷就可以。但是需要輔助空間。如果不使用臨時緩衝區,該怎麼解決?使用兩個指標,乙個指標指向當前節點,另乙個指標用於向後遍歷剩餘節點,把重複節點刪除。這裡刪除只是用乙個節點就可以,檢查ptr next data是否重複就可以。這裡給出兩種方法 第...

《程式設計師面試金典》回文鍊錶

題目描述 請編寫乙個函式,檢查鍊錶是否為回文。給定乙個鍊錶listnode phead,請返回乙個bool,代表鍊錶是否為回文。測試樣例 返回 true 返回 false 思路我們有兩種方法,比較容易想到的方法應該是使用棧儲存前一半的結點,然後對於後一半的結點再乙個個的與棧內的結點比較是否相等 還有...

程式設計師金典 鍊錶分割

題目描述 編寫 以給定值x為基準將鍊錶分割成兩部分,所有小於x的結點排在大於或等於x的結點之前 給定乙個鍊錶的頭指標 listnode phead,請返回重新排列後的鍊錶的頭指標。注意 分割以後保持原來的資料順序不變。struct listnode class partition else else...