哨兵節點 標準工具人

2021-10-22 06:45:31 字數 1407 閱讀 6919

這還是一道鍊錶題,原題如下:

給你乙個鍊錶的頭節點head和乙個整數val,請你刪除鍊錶中所有滿足node.val == val的節點,並返回新的頭節點 。

輸入:head = [1,2,6,3,4,5,6], val = 6

輸出:[1,2,3,4,5]

輸入:head = , val = 1

輸出:

輸入:head = [7,7,7,7], val = 7

輸出:

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

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

首先要用乙個while迴圈對頭節點進行判斷,刪除所有頭部要刪除的節點,在按上述方法刪除中間的節點。具體**如下:

public

static listnode myremoveelements

(listnode head,

int val)

else

}// 正常判斷next

listnode current = head;

while

(current != null && current.next != null)

else

}return head;

}

引入哨兵節點,無需再分步判斷頭節點和中間節點了。

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

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

演算法:

返回sentinel.next

public

static listnode removeelements

(listnode head,

int val)

return sentinel.next;

}

移除鍊錶元

帶哨兵節點和不帶哨兵節點的單鏈表操作的對比

哨兵節點 哨兵節點 sentinel 是乙個啞元節點 dummy node 可以簡化邊界條件。是乙個附加的鍊錶節點,該節點作為第乙個節點,它的值域中並不儲存任何東西,只是為了操作的方便而引入的。如果乙個鍊錶有哨兵節點的話,那麼線性表的第乙個元素應該是鍊錶的第二個節點。很多情況下,需要處理當前節點的前...

鍊錶中的哨兵節點

哨兵節點 在沒有哨兵節點時 對鍊錶進行插入操作時,需要判斷當前鍊錶是否有節點,大致如下 if head null else在進行刪除操作時,需要判斷刪除的是否是最後乙個節點,大致如下 if head.next null else有哨兵節點時 對鍊錶進行插入操作時,需要判斷當前鍊錶是否有節點,大致如下...

直接插入排序哨兵節點

在 資料結構 直接排序演算法中引入了哨兵節點 目的 減少了越界檢查 只是為了表明哨兵這種結構的潛在價值?將資料直接放置在a 1 n 上 a 0 作為哨位節點 void insertsort item data,int len data j 1 data 0 怎乙個e xin了得 首先更改資料結構 t...