移除链表元素

题目

给你一个链表的头节点 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;

    }
};

posted @ 2023-02-25 16:20  铜锣湾陈昊男  阅读(7)  评论(0)    收藏  举报