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

结果就是通过了:

相关推荐
ChillJavaGuy15 小时前
常见限流算法详解与对比
java·算法·限流算法
sali-tec15 小时前
C# 基于halcon的视觉工作流-章34-环状测量
开发语言·图像处理·算法·计算机视觉·c#
Gu_shiwww16 小时前
数据结构8——双向链表
c语言·数据结构·python·链表·小白初步
你怎么知道我是队长17 小时前
C语言---循环结构
c语言·开发语言·算法
艾醒17 小时前
大模型面试题剖析:RAG中的文本分割策略
人工智能·算法
纪元A梦19 小时前
贪心算法应用:K-Means++初始化详解
算法·贪心算法·kmeans
_不会dp不改名_19 小时前
leetcode_21 合并两个有序链表
算法·leetcode·链表
mark-puls19 小时前
C语言打印爱心
c语言·开发语言·算法
Python技术极客19 小时前
将 Python 应用打包成 exe 软件,仅需一行代码搞定!
算法
吃着火锅x唱着歌19 小时前
LeetCode 3302.字典序最小的合法序列
leetcode