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

结果就是通过了:

相关推荐
程序员泡椒5 分钟前
二分查找Go版本实现
数据结构·c++·算法·leetcode·go·二分
小雨下雨的雨6 分钟前
Flutter鸿蒙共赢——墨染算法:柏林噪声与鸿蒙生态中的数字水墨意境
算法·flutter·华为·交互·harmonyos·鸿蒙
NAGNIP6 小时前
万字长文!回归模型最全讲解!
算法·面试
知乎的哥廷根数学学派6 小时前
面向可信机械故障诊断的自适应置信度惩罚深度校准算法(Pytorch)
人工智能·pytorch·python·深度学习·算法·机器学习·矩阵
666HZ6668 小时前
数据结构2.0 线性表
c语言·数据结构·算法
实心儿儿9 小时前
Linux —— 基础开发工具5
linux·运维·算法
charlie1145141919 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式
清木铎11 小时前
leetcode_day4_筑基期_《绝境求生》
算法
清木铎11 小时前
leetcode_day10_筑基期_《绝境求生》
算法
j_jiajia11 小时前
(一)人工智能算法之监督学习——KNN
人工智能·学习·算法