Leetcode No 203 移除鍊錶元素

2021-10-19 06:19:12 字數 1192 閱讀 5073

刪除鍊錶中等於給定值val的所有節點。

示例:

輸入: 1->2->6->3->4->5->6, val = 6

輸出: 1->2->3->4->5

方法:哨兵節點

如果刪除的節點是中間的節點,則問題似乎非常簡單:

選擇要刪除節點的前乙個結點 prev。

將 prev 的 next 設定為要刪除結點的 next。

當要刪除的乙個或多個節點位於鍊錶的頭部時,事情會變得複雜。

可以通過哨兵節點去解決它,哨兵節點廣泛應用於樹和鍊錶中,如偽頭、偽尾、標記等,它們是純功能的,通常不儲存任何資料,其主要目的是使鍊錶標準化,如使鍊錶永不為空、永不無頭、簡化插入和刪除。

在這裡哨兵節點將被用於偽頭。

演算法:初始化哨兵節點為 listnode(0) 且設定 sentinel->next = head。

初始化兩個指標 curr 和 prev 指向當前節點和前繼節點。

當 curr != nullptr:

比較當前節點和要刪除的節點:

若當前節點就是要刪除的節點:則 pre->next = curr->next。

否則設 prve = curr。

遍歷下乙個元素:curr = curr->next。

返回 sentinel->next。

class solution 

pre=head;

head=head->next;

if(todelete!= nullptr)

}return sentinel->next;}};

時間複雜度:o(n),只遍歷了一次。

空間複雜度:o(1)。

203 移除鍊錶元素

刪除鍊錶中等於給定值val的所有節點。示例 輸入 1 2 6 3 4 5 6,val 6輸出 1 2 3 4 5刪除結點的步驟 找到該結點的前乙個結點 進行刪除操作 三種方法 1.刪除頭結點時另做考慮 由於頭結點沒有前乙個結點 2.新增乙個虛擬頭結點,刪除頭結點就不用另做考慮 3.遞迴 演示 方法一...

203 移除鍊錶元素

刪除鍊錶中等於給定值 val 的所有節點。示例 輸入 1 2 6 3 4 5 6,val 6 輸出 1 2 3 4 5使用空表頭,就可以不用判斷單個節點的情況或多個相同節點的情況.使用空表頭 public listnode removeelementsdummy listnode head,int ...

203 移除鍊錶元素

刪除鍊錶中與val值相等的節點,使用哨兵節點 哨兵節點廣泛應用於樹和鍊錶中,如偽頭 偽尾 標記等,它們是純功能的,通常不儲存任何資料,其主要目的是使鍊錶標準化,如使鍊錶永不為空 永不無頭 簡化插入和刪除。屬於簡單題 class solution def removeelements self,hea...