leetcode 203.移除链表元素

news2024/9/22 2:09:06

⭐️ 题目描述

在这里插入图片描述
🌟 leetcode链接:移除链表元素

1️⃣ 代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */

/*
    思路1:遍历链表,同时用另一个指针记录当前结点的上一个结点。如果是要删除的元素
    那么就 free 当前结点,再把当前结点的上一个结点链接到当前结点的下一个结点。
*/
struct ListNode* removeElements(struct ListNode* head, int val){    
    struct ListNode * cur = head;
    struct ListNode * prev = NULL;

    while (cur != NULL) {
        if (cur->val == val) {
            // 当前结点是要删除的结点
            // 特殊情况:第一个就是要删除的元素,但是prev为NULL
            if (cur == head) {
                head = cur->next;
                free(cur);
                cur = head;
            } else {
                prev->next = cur->next;
                free(cur);
                cur = prev->next;
            }
        } else {
            // 迭代往后走
            prev = cur;
            cur = cur->next;
        }
    }

    return head;
}

2️⃣ 代码:

/*
    思路2:把不是要删除的元素,尾插到一个新链表中。如果是要删除的元素 free 释放,继续迭代。(采用哨兵卫的头)
*/
struct ListNode* removeElements(struct ListNode* head, int val){    

    // 哨兵卫
    struct ListNode* newHead = (struct ListNode *)malloc(sizeof(struct ListNode));
    newHead->next = NULL;
    struct ListNode* tail = newHead;

    // 遍历链表
    struct ListNode * cur = head;
    while (cur != NULL) {
        if (cur->val == val) {
            struct ListNode* next = cur->next;
            free(cur);
            cur = next;
        } else {
            tail->next = cur;
            tail = cur;
            cur = cur->next;
        }
    }

    // 特殊情况:如果最后一个结点是删除的元素,释放掉当前元素,上一个元素的 next 还指向当前释放的元素。
    // 造成野指针问题
    tail->next = NULL;

    // 释放
    head = newHead->next;
    free(newHead);
    return head;
}

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/714109.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDA c++分析辅助插件ida_medigate使用记录

1.下载插件 IDA_medigate 2.将medigate_cpp_plugin.py放到 ida的plugin文件夹中 plugins/ida-referee/referee.py 放置到plugin中 3.将下载的 ida_medigate 放到IDA 内置的python38的Lib\site-packages\目录下 如:D:\IDA_Pro_7.7\python38\Lib\site-packages4.配置插件搜索…

大厂面试官:软件测试员,你的简历,是如何石沉大海的?

引言 俗话说:知己知彼百战百胜,面试如打仗,不是面试官赢,就是求职者胜。站在面试官的维度来跟求职者聊天,让求职者知道面试官的心理。 因为我本身作为一面多年的大厂面试官,相对来说还是有一些面试经验&am…

股价在5年内暴涨了3000%后,Enphase Energy未来还会继续上涨吗?

来源:猛兽财经 作者:猛兽财经 Enphase Energy股票的关键指标 最近很多人都在关注Enphase Energy(ENPH)的关键指标,包括该公司第二季度的指引和最近的股价调整。 2023年4月25日收盘后,Enphase Energy公布了…

leetcode每日一题——80.删除有序数组中的重复项II(面试经典150题)

一、题目描述与要求 80. 删除有序数组中的重复项 II - 力扣(LeetCode) 题目描述 给你一个有序数组 nums ,请你 原地 删除重复出现的元素,使得出现次数超过两次的元素只出现两次 ,返回删除后数组的新长度。 不要使用…

NodeJS安装教程(详细)

系列文章 MySQL安装教程(详细) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/126037520 MySQL卸载教程(详细) 本文链接:https://blog.csdn.net/youcheng_ge/article/details/129279265 …

Linux 内核源代码情景分析(一)

系列文章目录 Linux 内核设计与实现 深入理解 Linux 内核 Linux 设备驱动程序 Linux设备驱动开发详解 深入理解Linux虚拟内存管理 Linux 内核源代码情景分析(一) 文章目录 系列文章目录一、存储管理1、外部设备存储空间的地址映射(1&#xff…

LinK3D论文详解

摘要 特征提取和匹配是许多计算机视觉任务的基本部分,例如二维或三维物体检测、识别和配准。众所周知,二维特征提取和匹配已经取得了很大的成功。遗憾的是,在3D领域,由于描述能力差和效率低,目前的方法无法支持3D激光雷…

uniapp在微信开放平台创建移动应用时,如何生成应用签名的问题

包名在打包的时候是必填项,就不多赘述了… 微信开放平台获取应用签名, 场景: 首先需要在手机或者模拟器上下载签名生成工具,下载地址:下载签名生成工具 然后手机打开, 在这里输入你的app打包时的包名&…

【雕爷学编程】Arduino动手做(148)---MD-PS002压力传感器模块

37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的&am…

[解决方案] 在linux运行python代码报错(Illegal instruction (core dumped))

PVE修改CPU类型 在运行Python代码时遇到"Illegal instruction (core dumped)"错误时,意味着你的代码尝试在当前CPU架构不支持的指令上运行 1. 利用lscpu命令查看宿机和虚拟机CPU架构,确定宿机和虚拟机是否支持avx指令集 可以发现宿机是支持avx…

暑期学JavaScript【第四天】

日期对象 创建 //创建 const date new Date(); // 默认使用现在时间常用方法 时间戳的获取方式 date.getTime()new Date()Date.now() 倒计时案例 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta htt…

Redis初步认识

1、概述 redis是一款高性能的NOSQL系列的非关系型数据库&#xff1b; 2、什么是NOSQL&#xff1f; NOSQL(NoSQLNotOnlySQL)&#xff0c;意即“不仅仅是SQL”&#xff0c;是一项全新的数据库理念&#xff0c;泛指非关系型的数据库随着互联网web2.0网站的兴起&#xff0c;传统…

Java中常见的线程池以及ThreadPoolTaskExecutor和ThreadPoolExecutor

线程池的基本组成&#xff1a; 线程管理器&#xff1a;用于创建并管理线程池&#xff0c;负责线程池的创建、销毁以及任务的添加。 工作线程&#xff1a;线程池中的线程&#xff0c;负责执行任务&#xff0c;没有任务时处于等待状态。 任务接口&#xff1a;每个任务必须实现的…

gen1-视频生成论文阅读

文章目录 摘要贡献算法3.1 LDM3.2 时空隐空间扩散3.3表征内容及结构内容表征结构表征条件机制采样 3.4优化过程 实验结果结论 论文&#xff1a; 《Structure and Content-Guided Video Synthesis with Diffusion Models》 官网&#xff1a; https://research.runwayml.com/ge…

aliyun-oss-sdk阿里云OSS视频上传(断点续传)前端实现

问题背景 最近上传视频的功能&#xff0c;突然炸了&#xff0c;两年没动的代码&#xff0c;突然不行辽&#xff0c;首次上传成功&#xff0c;后面继续上传就可以&#xff0c;但凡有一次上传失败&#xff0c;再上传文件就不行。 这里博主使用的是凭证上传方式哈。 凭证上传 …

CMU 15-445 -- Hash Tables - 04

CMU 15-445 -- Hash Tables - 04 引言Hash TablesHash FunctionsHashing Scheme小结 Dynamic Hash TablesChained Hashing (链式哈希)Extendible Hashing(可扩展哈希)Linear Hashing(线性哈希) 总结 引言 本系列为 CMU 15-445 Fall 2022 Database Systems 数据库系统 [卡内基梅…

【IDA疑难杂症修复】

我们在使用IDA进行逆向分析的时候&#xff0c;会遇到一些问题&#xff0c;这篇文章来带领大家学习IDA中疑难杂症的修复&#xff1a;函数大小限制&#xff0c;栈不平衡&#xff0c;switch无法识别&#xff08;跳转表修复&#xff09;&#xff0c;ida Decompile as call。 一.函…

Redis学习(一)数据类型、Java中使用redis、缓存概念

文章目录 常用数据结构String类型Hash类型List类型Set类型SortedSet 类型 通用命令key的层级结构 Spring Data Redis快速入门RedisTemplate的序列化方式StringRedisTemplateRedisTemplate的Hash类型操作 实战操作短信登录发送验证码校验登录信息校验登录状态 商家查询缓存缓存更…

antdesignpro组件Upload传excel文件到后端flask的两种方案

&#xff08;特别提醒&#xff1a;后端xlrd新版本不支持xlsx文件&#xff0c;所以暂用xls文件进行上传&#xff09; 1.第一种方案&#xff1a;组件接收到excel文件,然后解析成list数据&#xff0c;解析是要用到XLSX&#xff08; 安装插件&#xff1a;npm i xlsx --save impor…

【Leetcode】21.合并两个有序链表

一、题目 1、题目描述 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 示例1: 输入:l1 = [1,2,4], l2 = [1,3,4] 输出:[1,1,2,3,4,4]示例2: 输入:l1 = [], l2 = [] 输出:[]示例3: 输入:l1 = [], l2 = [0] 输…