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;
}

结果就是通过了:

相关推荐
wen__xvn7 分钟前
代码随想录算法训练营DAY1第一章 数组part01
数据结构·算法·leetcode
爱编码的傅同学11 分钟前
【程序地址空间】页表的映射方式
c语言·数据结构·c++·算法
UID962220 分钟前
[特殊字符] 无级变速传动(CVT)技术突破之道 | 易经×数学×工程的跨维度破解方案
算法·数学建模·开源
生信碱移26 分钟前
神经网络单细胞预后分析:这个方法直接把 TCGA 预后模型那一套迁移到单细胞与空转数据上了!竟然还能做模拟敲除与预后靶点筛选?!
人工智能·深度学习·神经网络·算法·机器学习·数据挖掘·数据分析
在风中的意志32 分钟前
[数据库SQL] [leetcode-175] 175. 组合两个表
数据库·sql·leetcode
圣保罗的大教堂33 分钟前
leetcode 1970. 你能穿过矩阵的最后一天 困难
leetcode
yugi98783838 分钟前
MFCC特征提取与SVM训练语音识别
算法·支持向量机·语音识别
yuanmenghao41 分钟前
MSAC 算法详解以及与 RANSAC 对比示例
算法·自动驾驶·聚类·ransac·msac·系统辨识‘
造夢先森42 分钟前
常见数据结构及算法
数据结构·算法·leetcode·贪心算法·动态规划
listhi5201 小时前
基于蒙特卡洛方法处理电力系统负荷不确定性的解决方案
算法