刪除鍊錶結點

2021-10-23 10:41:47 字數 1238 閱讀 2137

/*	劍指offer18題:刪除鍊錶的節點

* 題目描述:給定單向鍊錶的頭指標和乙個要刪除的節點的值,定義乙個函式刪除該節點。

* 返回刪除後的鍊錶的頭節點。

* 解題思路:該題在劍指offer中的原題是,給定乙個單鏈表的頭指標、指定結點指標,

* 要求以o(1)的時間複雜度刪除該結點。解決方法為將待刪除結點的後繼結點的值

* 賦給待刪除結點然後將待刪除結點的後繼指向其後繼的後繼,然後釋放掉待刪除

* 結點的原始後繼。對於待刪除結點沒有後繼結點的情況需要單獨討論,

* 如果待刪除結點是尾結點,沒有後繼,直接釋放尾結點會造成空指標異常,

* 仍需要從頭節點遍歷到尾結點的前驅。如果鍊錶中只有乙個頭結點則需返回空指標。

*

* 對於leetcode中的本題,需要從頭結點遍歷到尾結點,如果有目標結點則刪除

* 然後返回頭指標(題目保證鍊錶各個結點的值都不相同,所以不考慮有多個目標結點)

* 刪除的操作是將待刪除結點的前驅的後繼指向待刪除結點的後繼,需要待刪除結點有

* 有前驅(後繼可以為null),對於目標結點是頭結點的情況需要單獨處理即將頭指標

* 變更為原頭結點的後繼,對於head為空的情況直接返回head。

* 測試資料:head = [4,5,1,9], val = 5 常規情況

* head = [4,5,1,9], val = 4 刪除頭

* head = [4,5,1,9], val = 9 刪除尾

* head = [4,5,1,9], val = 7 目標結點不在表中

* head = null 空表

* head = [4] 表中只有乙個結點

*

*

* */

public class shanchulianbiaodejiedian }}

class shanchulianbiaodejiediansolution

if(head.val==val)

//宣告用於遍歷鍊錶的游標指標

listnode p = head;

while(p.next!=null)

p=p.next;

}return head;

}}

刪除鍊錶的結點

1.問題描述 給定鍊錶的頭結點和待刪除結點,要求刪除鍊錶的結點要求時間複雜度為o 1 來自 劍指offer 2.分析 我們都知道鍊錶的要想訪問某個結點必須要從頭結點挨個遍歷,並且單鏈表我們沒有指向前驅的結點,因此我們可以用狸貓換太子 用這個待刪除結點的下個結點裡面的內容,複製到這個待刪除結點,然後刪...

刪除鍊錶的結點

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

鍊錶結點的刪除

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