移除链表元素
题目
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。
示例 1:

输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]
示例 2:
输入:head = [], val = 1
输出:[]
示例 3:
输入:head = [7,7,7,7], val = 7
输出:[]
思路:
我在这里只提倡一种做法那就是添加头节点的做法,但是要注意的一点就是每一次移动节点的时候都要pos_node= pos_node->next,但是要是删除节点的话那么就不用该操作。
代码
//为了空间回收,利用一个lins节点记录要删除的节点
class Solution {
public:
ListNode* removeElements(ListNode* head, int val) {
ListNode* virhead = new ListNode(-1);//虚拟头节点设置为-1
virhead->next=head;
//记录新链表的头节点位置
while ((virhead->next->val==val)&&(virhead->next!=NULL)){
ListNode* lins = virhead;
virhead = virhead->next;
delete lins;
}
//删除val节点
ListNode* pos_node = virhead;
while(pos_node->next!=NULL){
if(pos_node->next->val == val){
ListNode* lins = pos_node->next;
//判断后后节点是不是空的
if(pos_node->next->next==NULL){
pos_node->next = NULL;
}else{
pos_node->next = pos_node->next->next;
}
delete lins;
}else{
//只有没有删除操作的时候才需要这个操作
pos_node = pos_node->next;
}
}
return virhead->next;
}
};

浙公网安备 33010602011771号