鍊錶及經典問題

2021-10-25 16:45:08 字數 1841 閱讀 2039

鍊錶及經典問題

鍊錶及經典問題

第一周 - 鍊錶及經典問題

(1)鍊錶的基礎知識鍊錶的結構

訪問鍊錶的時間複雜度幾種經典的鍊錶實現方法

(2)鍊錶的典型應用場景

(3)經典面試題鍊錶的訪問鍊錶的反轉

鍊錶的節點刪除

(4)彩蛋習題及相關說明

(1)鍊錶的基礎知識

鍊錶的結構

節點資料域指標域

實現方式包括位址、下標(相對位址)、引用

鏈狀結構

通過指標域的值形成了乙個線性結構

訪問鍊錶的時間複雜度

鍊錶不適合快速的定位資料,適合動態的插入和刪除的應用場景。

查詢節點o(th)插入節點o(1) 刪除節點o(1)

幾種經典的鍊錶實現方法

傳統方法(節點+指標) 使用陣列模擬

指標域和資料域分離

利用陣列存放下標進行索引

……(2)鍊錶的典型應用場景

作業系統內的動態記憶體分配

lru快取淘汰演算法

lru = least recethtly used(近期最少使用)快取是一種高速的資料結構。

裝置間存在速度差異,可以通過將使用較多的資料存放在高速區域,而將使用較少的內容存放

在相對低速的區域的方式,來對系統進行優化。

(3)經典面試題

鍊錶的訪問

leetcode #141 環狀鍊錶

思路1:使用雜湊表(額外的儲存區)儲存已經遍歷過的節點思路2:雙指標做法

使用快慢指標 快指標一次向前2個節點 慢指標一次向前1個節點

有環的鍊錶中 快指標和慢指標最終一定會在環中相遇

無環的鍊錶中 快指標會率先訪問到鍊錶尾 從而終結檢測過程

leetcode #142 環狀鍊錶ii

快指標走的路程是慢指標的2倍

考慮快慢指標第一次相遇的情況(設此時慢指標走的路程為x) 指定乙個指標p放置在鍊錶頭部(p每次向前1個節點) 再走乙個路程為x的長度

慢指標到達了2x的位置指標p到達了x的位置慢指標和p相遇了

往前回放一下 在環的入口開始 慢指標和p已經相遇了

慢指標和p重疊走了一段距離

leetcode #202 快樂數

思路:轉化為判斷鍊錶是否有環的問題收斂性的證明

32位itht的表示正整數大概是21億( )

在這個範圍內 各位數字平方和最大的數是1999999999 和為730

根據鴿巢原理(pigeothhole』s prithciple,也譯作抽屜原理)在730次迴圈後必定出現重複

鍊錶的反轉

leetcode #206 反轉鍊錶思路1:迭代反轉

可以使用虛擬頭節點來進行頭插法

思路2:遞迴反轉(一次拆掉乙個節點並遞迴處理剩餘的子鍊錶)

leetcode #92 反轉鍊錶ii

技巧:使用虛擬頭結點(dummy head)

通常用於鍊錶的首位址有可能改變的情況

leetcode #25 k個一組翻轉鍊錶

思路:先判斷是否有k個元素 然後對這k個節點進行反轉 最後拆裝一下首尾部分

leetcode #61 旋轉鍊錶

思路:把整個鍊錶首尾相接 向後走k位後將環拆開

leetcode #24 兩兩交換鍊錶中的節點

思路與leetcode #25完全一致,是k = 2的簡單情形。

鍊錶的節點刪除

leetcode #19 刪除鍊錶的倒數第n個節點思路:找到前乙個節點 刪除後調整指標

leetcode #83 刪除排序鍊錶中的重複節點

leetcode #82 刪除排序鍊錶中的重複節點ii

求出答案後,使用答案的數值替換下面鏈結中的對應部分。

答案.mp4

經典鍊錶問題

題目描述 在單鏈表中輸出倒數第k個節點 要求 如果鍊錶長為n,時間複雜度為o n 額外空間複雜度達到o 1 思路 當我們用num來表示鍊錶中節點個數,當我們輸出節點的時候會出現三種情況 不存在第k個節點,此時返回空 num第k個節點就是第乙個節點,操作較容易 num k 第k個節點在鍊錶中 num ...

鍊錶經典問題彙總

原帖位址 收集了一下鍊錶常見的面試題 1 如何判斷乙個單鏈表有環 2 如何判斷乙個環的入口點在 3 如何知道環的長度 4 如何知道兩個單鏈表 無環 是否相交 5 如果兩個單鏈表 無環 相交,如何知道它們相交的第乙個節點是什麼 6 如何知道兩個單鏈表 有環 是否相交 7 如果兩個單鏈表 有環 相交,如...

鍊錶的經典問題

如果兩個單鏈表相交,那應該呈 y 字形,也就是從交點以後的部分是兩個鍊錶的公共節點。所以,判斷是否相交只要看兩個鍊錶的最後乙個節點是否為同乙個即可。那麼如何找到交點呢?設兩個單鏈表的長度分別為l1 l2,假設l1 l2 則 l1 l2 的值就是交匯之前兩個鍊錶的長度差 因此,只有讓更長的鍊錶先走l1...