鍊錶中的哨兵節點

2021-10-16 12:58:39 字數 784 閱讀 5113

哨兵節點

在沒有哨兵節點時

對鍊錶進行插入操作時,需要判斷當前鍊錶是否有節點,**大致如下:

if(head == null)

else

在進行刪除操作時,需要判斷刪除的是否是最後乙個節點,**大致如下:

if(head.next  == null)

else

有哨兵節點時

對鍊錶進行插入操作時,需要判斷當前鍊錶是否有節點,**大致如下:

newnode.next = current.next;

current.next = newnode;

在進行刪除操作時,需要判斷刪除的是否是最後乙個節點,**大致如下:

current.next = current.next.next;
因為哨兵節點始終會存在,索引在進行插入或者刪除操作時,不用考慮鍊錶是否為空,是否為最後乙個節點,

簡化了鍊錶操作。

鍊錶注意點

如果鍊錶為空時,**是否能正常工作?

如果鍊錶只包含乙個結點時,**是否能正常工作?

如果鍊錶只包含兩個結點時,**是否能正常工作?

**邏輯在處理頭結點和尾結點的時候,是否能正常工作?

練習題leetcode中對應的練習題目有:

206(單鏈表反轉),141(鍊錶中環的檢測)

21(兩個有序鍊錶的合併)

19(刪除鍊錶倒數第n個節點)

87(求鍊錶的中間節點)

演算法 資料結構 鍊錶和哨兵節點

鍊錶是一種基礎的資料結構,但對於一些初學者來說,實現乙個鍊錶還是比較困難的,許多操作作用在頭部或尾部時需要特殊處理。比如下面這段 template typename t void linkedlist remove linkedlistnode node 上述 進行了兩次的空值判斷,有可能會更新煉表...

鍊錶 刪除鍊錶中重複的節點

刪除鍊錶中重複的節點 方法一 採用遞迴的方法,但這種方法在鍊錶無重複節點時效率不高 function deleteduplication phead if phead.val phead.next.val return deleteduplication node 採用遞迴的方法從下乙個不重複的點開...

鍊錶 刪除鍊錶中重複的節點

刪除鍊錶中重複的節點 方法一 採用遞迴的方法,但這種方法在鍊錶無重複節點時效率不高 function deleteduplication phead if phead.val phead.next.val return deleteduplication node 採用遞迴的方法從下乙個不重複的點開...