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

结果就是通过了:

相关推荐
颜酱15 分钟前
一步步实现字符串计算器:从「转整数」到「带括号与优化」
javascript·后端·算法
CoovallyAIHub19 小时前
语音AI Agent编排框架!Pipecat斩获10K+ Star,60+集成开箱即用,亚秒级对话延迟接近真人反应速度!
深度学习·算法·计算机视觉
木心月转码ing21 小时前
Hot100-Day14-T33搜索旋转排序数组
算法
会员源码网1 天前
内存泄漏(如未关闭流、缓存无限增长)
算法
颜酱1 天前
从0到1实现LFU缓存:思路拆解+代码落地
javascript·后端·算法
颜酱1 天前
从0到1实现LRU缓存:思路拆解+代码落地
javascript·后端·算法
CoovallyAIHub2 天前
Moonshine:比 Whisper 快 100 倍的端侧语音识别神器,Star 6.6K!
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
速度暴涨10倍、成本暴降6倍!Mercury 2用扩散取代自回归,重新定义LLM推理速度
深度学习·算法·计算机视觉
CoovallyAIHub2 天前
实时视觉AI智能体框架来了!Vision Agents 狂揽7K Star,延迟低至30ms,YOLO+Gemini实时联动!
算法·架构·github