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

结果就是通过了:

相关推荐
炽烈小老头几秒前
【每天学习一点算法 2025/12/30】最大子序和
学习·算法
Flash.kkl2 分钟前
优选算法专题十八——BFS解决拓扑排序
算法·宽度优先
hetao17338377 分钟前
2025-12-30 hetao1733837 的刷题笔记
c++·笔记·算法
小袁顶风作案11 分钟前
leetcode力扣——27.移除元素、26.删除有序数组的重复项、80.删除有序数组中的重复项 II
数据结构·算法·leetcode
goodlook012323 分钟前
监控平台搭建-监控指标展示-Grafana篇(五)
java·算法·docker·grafana·prometheus
这是个栗子24 分钟前
前端开发中的常用工具函数(持续更新中...)
前端·javascript·算法
断剑zou天涯25 分钟前
【算法笔记】有序表——相关题目
笔记·算法
wearegogog12326 分钟前
基于MATLAB的微光图像增强实现方案
算法
断剑zou天涯30 分钟前
【算法笔记】有序表——SB树
笔记·算法
曾几何时`32 分钟前
滑动窗口(十五)2962. 统计最大元素出现至少 K 次的子数组(越长越合法型)
数据结构·算法