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

结果就是通过了:

相关推荐
岛雨QA16 小时前
递归「Java数据结构与算法学习笔记5」
数据结构·算法
kebijuelun17 小时前
Learning Personalized Agents from Human Feedback:用人类反馈训练可持续个性化智能体
人工智能·深度学习·算法·transformer
Eloudy17 小时前
稀疏矩阵的 CSR 格式(Compressed Sparse Row)
人工智能·算法·arch·hpc
岛雨QA17 小时前
栈「Java数据结构与算法学习笔记4」
数据结构·算法
乐观勇敢坚强的老彭17 小时前
c++寒假营day05
开发语言·c++·算法
重生之后端学习17 小时前
74. 搜索二维矩阵
开发语言·数据结构·算法·职场和发展·深度优先
JYeontu17 小时前
程序员都该掌握的“质因数分解”
前端·javascript·算法
with-the-flow17 小时前
从数学底层的底层原理来讲 random 的函数是怎么实现的
c语言·python·算法
tyb33333317 小时前
leetcode:吃苹果和队列
算法·leetcode·职场和发展
多恩Stone18 小时前
【3D-AICG 系列-15】Trellis 2 的 O-voxel Shape: Flexible Dual Grid 代码与论文对应
人工智能·python·算法·3d·aigc