leetcode:移除链表元素

1.题目描述

题目链接:203. 移除链表元素 - 力扣(LeetCode)

2.解题思路

我们定义一个cur指向当前结点,定义prev指向前一个结点,next指向下一个结点

如果cur->val==val,那我们就删除这个结点

怎么删除呢:

我们让prev->next指向cur->next,然后free(cur)

为了防止野指针,我们可以定义一个next指向cur->next,先free(cur),再让prev->next指向next

特殊情况

如果cur为第一个结点,那prev就是空,我们在这里得分成两种情况:

如果prev不为空,则prev->next=next;

如果prev为空,head=next;

由于链表是无序的,因此我们需要遍历一遍才能删除所有的val,可以使用while循环来控制

3.代码

根据解题思路,我们可以写代码了:

cs 复制代码
struct ListNode* removeElements(struct ListNode* head, int val) {
    struct ListNode* prev=NULL;
    struct ListNode* cur=head;
    while(cur!=NULL)
    {
        if(cur->val==val)
        {
            struct ListNode* next=cur->next;
            free(cur);
            if(prev)
            {
                prev->next=next;
            }
            else
            {
                head=next;
            }  
            cur=next;   
        }
        else
        {
            prev=cur;
            cur=cur->next;
        }
    }
    return head;
}

结果就是通过了:

相关推荐
睡不醒的kun13 分钟前
定长滑动窗口-基础篇(2)
数据结构·c++·算法·leetcode·职场和发展·滑动窗口·定长滑动窗口
庄小焱26 分钟前
【机器学习】——房屋销售价格预测实战
人工智能·算法·机器学习·预测模型
txzrxz32 分钟前
单调栈详解(含题目)
数据结构·c++·算法·前缀和·单调栈
AI科技星1 小时前
张祥前统一场论的数学表述与概念梳理:从几何公设到统一场方程
人工智能·线性代数·算法·机器学习·矩阵·数据挖掘
程序员-King.1 小时前
day167—递归—二叉树的直径(LeetCode-543)
算法·leetcode·深度优先·递归
亲爱的非洲野猪1 小时前
2动态规划进阶:背包问题详解与实战
算法·动态规划·代理模式
YH12312359h1 小时前
战斗机目标检测与跟踪:YOLOv26算法详解与应用
算法·yolo·目标检测
芒克芒克1 小时前
LeetCode 134. 加油站(O(n)时间+O(1)空间最优解)
java·算法·leetcode·职场和发展
TracyCoder1232 小时前
LeetCode Hot100(4/100)——283. 移动零
算法·leetcode
啊阿狸不会拉杆2 小时前
《计算机操作系统》第七章 - 文件管理
开发语言·c++·算法·计算机组成原理·os·计算机操作系统