單向鍊錶刪除節點的乙個技巧,這個是在《程式設計之美》上面看到的,可以用來對付一些演算法題。
有時候會遇到這種情況,單鏈表提供乙個指標,要求要刪除指標指向的節點。如下
考慮到釋放記憶體,還再需要乙個指標
我們具體一下,有這麼乙個單向鍊錶,這個鍊錶的節點比較簡單,【資料域只有乙個整型】,並且當前的指標【iter不是頭指標】,我們被要求刪除這個指標指向的節點。
我們再標註一下
好了,因為指標指向的節點是需要刪除的,所以其他節點都是『好』的。
因為是單向鍊錶,所以我們取不到iter指標的前乙個節點的指標(非要取的話,效率可能堪憂)。所以只有這個iter指標,刪除iter指標指向的節點是比較困難的,但是相對的,刪除iter後面的節點是很簡單的。
為了做好刪除工作,我們只需要把【iter指標指向的節點的後續節點的資料域】複製到【iter指標指向的節點中】
這時候,鍊錶變成這樣子。換句話說,刪除iter或者刪除iter_free所得到的結果都是正確結果了。前面說了,刪除iter所指還是比較麻煩的,那就刪除iter_free所指不就好了。
實現起來不難。實質就是用複製操作來取代指標操作,可能就需要稍微權衡一下這兩種操作的代價以及深複製淺複製問題,對於節點不是很複雜的鍊錶,這個方法還是很讚的。
單向鍊錶刪除節點
include include include include 使用隨機數的標頭檔案 using namespace std class list list del ptr list head,list ptr int main srand unsigned time null 以時間為隨機數的種子...
單向鍊錶節點的刪除
單向鍊錶的建立在這裡不在贅述,詳細請看另一篇文章 單向鍊錶的建立 在本篇文章中,主要通過舉例的方式來幫大家理解單向鍊錶節點的刪除。本篇文章中建立節點用如下表示 typdef struct node elemsn 在鍊錶節點的刪除中,可以分為兩種情況 刪除頭節點 pdel head 定義指標指向待刪節...
單向鍊錶實現 插入節點 刪除節點操作
function node element 該類的功能包括插入刪除節點 在列表中查詢給定的值。function llist 插入新節點 向鍊錶中插入乙個節點,需要修改它前面的節點 前驅 使其指向新加入的節點,而新加入的節點則指向原來前驅指向的節點 find方法 遍歷鍊錶,查詢給定資料。如果找到資料,...