目錄刪除鍊錶中等於給定值val的所有節點。
示例:
輸入: 1->2->6->3->4->5->6, val = 6
輸出: 1->2->3->4->5
直接使用給定的頭結點進行節點的刪除。此時需要對頭結點跟其他節點的刪除進行分類討論。
對於首節點的情況,我們先儲存首節點的位置,再向後移動頭指標,最後釋放刪除節點的空間。
while (head != null && head->val == val)
當退出迴圈時,可以確定的是首節點對應的值肯定不為目標值,我們再對非首節點的目標節點進行刪除:
listnode* cur = head;
while (cur != null && cur->next!= null) else
}
為了避免影響頭指標的位置,我們使用額外指針對鍊錶剩餘節點進行遍歷。每次需要對當前結點和下乙個結點是否為空進行討論。
完整**如下:
class solution
// 退出上述迴圈說明首位元素值不為目標節點
// 使用另乙個變數進行內部節點刪除的迴圈
// 保持頭結點位置正確性 方便進行返回
listnode* cur = head;
while (cur != nullptr && cur->next != nullptr)
else if (cur->next->val != val)
cur = cur->next;
}return head;
}};
不直接使用題目給定的頭節點指標,在之前先新增乙個虛節點,以此保證刪除節點**風格的統一。
listnode* dummynode =new listnode(0);
dummynode->next = head;
另外需要注意,在定義鍊錶結構體的時候,我們採用建構函式初始值列表來進行初始化,冒號後以成員變數名(成員初始值)的形式進行初始化。
花括號內為空函式的原因是該列表的唯一目的是為資料成員賦初值,一旦沒有其他任務需要執行,函式體也就為空了。
struct linkednode
};
最後所有元素按照鍊錶內的節點刪除來進行處理,完整**如下:
class solution
// 退出上述迴圈說明首位元素值不為目標節點
// 使用另乙個變數進行內部節點刪除的迴圈
// 保持頭結點位置正確性 方便進行返回
listnode* cur = head;
while (cur != nullptr && cur->next != nullptr)
else if (cur->next->val != val)
cur = cur->next;
}return head;
}};
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...