刪除鍊錶的結點

2021-06-28 09:30:38 字數 660 閱讀 8540

1.問題描述

給定鍊錶的頭結點和待刪除結點,要求刪除鍊錶的結點要求時間複雜度為o(1)。(來自《劍指offer》)

2.分析

我們都知道鍊錶的要想訪問某個結點必須要從頭結點挨個遍歷,並且單鏈表我們沒有指向前驅的結點,因此我們可以用狸貓換太子(用這個待刪除結點的下個結點裡面的內容,複製到這個待刪除結點,然後刪除下個結點),這樣就可以用o(1)時間複雜度來完成題目要求。但是如果這個待刪除結點為尾結點沒有下個結點,那沒辦法只能挨個遍歷到這個待刪除結點的前驅,然後刪掉這個結點。還有鍊錶中只有乙個結點的情況也需要考慮。

3.**

#include #include typedef struct node

listnode;

void deletenode(listnode *head, listnode *node)

if (node->next != null)

else

else

pre->next = null;

node = null;}}

}

刪除鍊錶結點

劍指offer18題 刪除鍊錶的節點 題目描述 給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。返回刪除後的鍊錶的頭節點。解題思路 該題在劍指offer中的原題是,給定乙個單鏈表的頭指標 指定結點指標,要求以o 1 的時間複雜度刪除該結點。解決方法為將待刪除結點的後繼結點的值 賦...

刪除鍊錶的結點

刪除鍊錶的結點 請編寫乙個函式,使其可以刪除某個鍊錶中給定的 非末尾的 節點,您將只被給予要求被刪除的節點。比如 假設該鍊錶為1 2 3 4,給定您的為該鍊錶中值為3的第三個節點,那麼在呼叫了您的函式之後,該鍊錶則應變成1 2 4。這道題讓我們刪除鍊錶的乙個節點,更通常不同的是,沒有給我們鍊錶的起點...

鍊錶結點的刪除

鍊錶結點的刪除 結點的刪除分為兩種情況 1 刪除頭結點。需要改變頭指標位置 2 刪除中間,尾結點。帶刪除結點的前驅必須有指標,將帶刪除結點的前驅與帶刪除結點的後繼連起來 例題1 設head指向乙個非空單項鍊表,且資料域的值不重複,在鍊錶中刪除關鍵字值為key的結點。分析 第一步 查詢值為key的結點...