LeetCode 203 | 移除链表元素
题目
题解
基本思想就是遍历链表,遇到相等的就删除,关键是引入哑结点,工作指针保持在待检查的元素前面,保证能进行删除操作。
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* removeElements(ListNode* head, int val){
if(!head)return nullptr;
ListNode* s = new ListNode(-1);//引入的哑节点
s->next=head;
auto p=s;//工作指针
while(p){
//注意p->next不一定有元素,不能直接取
if(p->next&&p->next->val==val){
if(p->next->next){//不是最后一个元素
p->next=p->next->next;
}
//最后一个元素特殊处理
else p->next=nullptr;
}
else p=p->next;
}
return s->next;
}
};