leetcode-203 移除链表元素:传送门
我的思路
设置一个哨兵节点,可以简化对头节点的操作,用一个指针保存节点的前驱节点。
ListNode* removeElements(ListNode* head, int val) {
if(head == nullptr)
return head;
ListNode* parent = new ListNode(-1);//哨兵节点
parent->next = head;
ListNode* prev = parent;//前驱节点
while(head != nullptr){//删除所有值为val的节点
if(head->val == val){
prev->next = head->next;
head->next = nullptr;
delete head;
head = prev->next;
}
else{
prev = head;
head = head->next;
}
}
head = parent->next;//根据哨兵节点找到链表头节点
delete parent;
parent = nullptr;
return head;
}