這還是一道鍊錶題,原題如下:
給你乙個鍊錶的頭節點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...