直接使用原来的链表来进行删除操作。
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
if(head==NULL) return NULL;
while(head!=NULL&&head->val==val){
ListNode* temp=head;
head=head->next;
delete temp;
}
ListNode* cur=head;
while(head!=NULL&&cur->next!=NULL){
if(cur->next->val==val){ //如果找到了要删除的节点
ListNode* temp=cur->next;
cur->next=cur->next->next;
delete temp ;
}else cur=cur->next; //否则就向后移动一个节点
}
return head;
}
};
设置一个虚拟头结点在进行删除操作
/**
* 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) {
ListNode* root = new ListNode(0);
ListNode* cur=root;
cur->next=head;
while(cur->next!=NULL){
if(cur->next->val==val){ //如果找到了要删除的节点
ListNode* temp=cur->next;
cur->next=cur->next->next;
delete temp ;
}else cur=cur->next; //否则就向后移动一个节点
}
return root->next;
}
};
总结
设置一个虚拟头结点在进行删除操作会方便很多
如果使用C,C++编程语言的话,不要忘了手动从内存中删除这两个移除的节点。