鍊錶節點被刪除時的資源釋放

2021-09-24 13:14:39 字數 854 閱讀 5784

【演算法專題 - 鍊錶】

《鍊錶系列之 無序單鏈表去重》

《鍊錶系列之 滑動視窗問題 – 所有生成視窗的最大值的集合》

【問題】

眾所周知,鍊錶結構相對於陣列結構的乙個優秀之處在於其刪除元素操作僅靠更改指標指向即可完成,而陣列則需要移動元素。但鍊錶中被刪除的元素所占用的資源是否需要被釋放?

【分析】

這個問題的關鍵在於組成鍊錶的節點結構複雜程度。大致分為以下兩類:

簡單節點結構 – 節點中儲存的資料未簡單資料型別,不存在動態記憶體分配

此種情況下我們無序對已經斷鏈的節點進行記憶體釋放操作。請參考本部落格文章《鍊錶系列之 無序單鏈表去重》。

/* ****** node struct */

public ******node

}

複雜節點結構 – 節點中儲存的是char *型別,在節點初始化的時候需要動態申請記憶體

此時,因為組成鍊錶的各個節點在初始化的時候都存在動態記憶體分配,故針對斷鏈的節點我們一定要注意其記憶體釋放,否則將出現記憶體洩漏。

/* complicated node struct */

public complicatednode

else

}}

需要注意一點:在釋放斷鏈節點的時候,節點內部動態申請的資源必須釋放,但是節點自身可能無需被釋放,詳情參考本部落格文章《鍊錶系列之 無序單鏈表去重》中的解決方案一**行20,此處我們依然需要使用next = next.next來保證程式正常執行!

python 釋放鍊錶節點 redis 鍊錶

摘自 redis設計與實現 鍊錶提供了高效的節點重排能力,以及順序性的節點訪問方式,並且可以通過增刪節點來靈活地調整鍊錶的長度。鍊錶在 redis 中的應用非常廣泛,比如列表鍵的底層實現之一就是鍊錶 當乙個列表鍵包含了數量比較多的元素,又或者列表中包含的元素都是比較長的字串時,redis 就會使用鍊...

鍊錶 刪除鍊錶的節點

劍指offer的乙個題,題目是要求在最少的時間內刪除鍊錶的節點。問題分析 對於鍊錶的刪除,按照劍指offer的一貫思路就是展開討論 1 空鍊錶咋辦 待刪除的節點是空節點咋辦 2 要刪除的節點在鍊錶中的位置有三種情況 1 鍊錶只有乙個節點,待刪除節點是表頭又是尾節點 2 鍊錶有多個節點,待刪除的節點是...

刪除鍊錶節點

問題描述 給出單鏈表頭指標以及要刪除節點的位址,要求寫 刪除這個節點,並且時間複雜度為o 1 如何實現?分析 1 應變能力 2 對時間複雜度的理解 平常思路 prev next temp next free temp 但是該思路的時間複雜度為o n 解題 不能從phead開始找,入口在所要刪除的節點...