【刷题记录】移除链表元素

news2024/11/28 22:44:13

本系列博客为个人刷题思路分享,有需要借鉴即可。

注:部分思路借鉴自程序员小熊
链接:https://leetcode.cn/problems/remove-linked-list-elements/solutions/341875/203-yi-chu-lian-biao-yuan-su-you-ya-di-gui-c-yu-ya/
来源:力扣(LeetCode)

1.目录大纲:
在这里插入图片描述

2.题目链接:
T1:LINK

3.详解思路:

T1:
在这里插入图片描述
思路1:双指针:遍历原链表,遇到val就执行删除val节点的操作
在这里插入图片描述
分析1:时间复杂度:O(N) 结论:yes

struct ListNode* removeElements(struct ListNode* head, int val){
    
    //处理head == val 的情况,使head!=val
    while (NULL != head && head->val == val) 
    {
        head = head->next;
    }
    
    struct ListNode* cur = head;
    struct ListNode* pre = head;
    while (cur != NULL) {
        if (cur->val == val) {
            //跳跃
            pre->next = cur->next;
        } else {
            //下一个跟进cur
            pre = cur;
        }
        //cur不断向前走
        cur = cur->next;
    }

    return head;
}

当然上面所说的思路也可以这样写:
在这里插入图片描述

struct ListNode* removeElements(struct ListNode* head, int val){
    
    //处理*head == val 的情况,使*head!=val
    while (NULL != head && head->val == val) 
    {
        head = head->next;
    }
    
    if(head == NULL)
    {
        return NULL;
    }

    struct ListNode* cur = head->next;//如果head为空链表这样写不合法
    struct ListNode* pre = head;

    while (cur != NULL) {
        if (cur->val == val) {
            //跳跃
            pre->next = cur->next;
        } else {
            //下一个跟进cur
            pre = cur;
        }
        //cur不断向前走
        cur = cur->next;
    }

    return head;
}

思路2:虚拟哨兵
在这里插入图片描述
分析:时间复杂度:O(N) 结论:yes

 struct ListNode* removeElements(struct ListNode* head, int val){
    
    struct ListNode* dummyHead = malloc(sizeof(struct ListNode));
    
    dummyHead->next = head;
    struct ListNode* cur = dummyHead;
    while (cur->next != NULL) {
        if (cur->next->val == val) {
            
            cur->next = cur->next->next;
        } else {
            cur = cur->next;
        }
    }

    return dummyHead->next;
}
作者:程序员小熊
链接:https://leetcode.cn/problems/remove-linked-list-elements/solutions/341875/203-yi-chu-lian-biao-yuan-su-you-ya-di-gui-c-yu-ya/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

思路3:重新构造一个新链表
在这里插入图片描述
在这里插入图片描述
分析3:时间复杂度:O(N) OK

struct ListNode* removeElements(struct ListNode* head, int val){
    
    //定义新链表的头尾指针
    struct ListNode* newHead = NULL;
    struct ListNode* newTail = NULL;

    //
    struct ListNode* pcur = head;
    while(pcur)
    {
        //不是val,尾插到新链表
        if(pcur->val!=val)
        {
            if(newHead == NULL)
            {
                //链表为空
                newHead = newTail = pcur;
            }
            else//链表不为空
            {
                newTail->next = pcur;
                newTail = newTail->next;//更新尾节点
            }
        }

        //更新pcur指针
        pcur = pcur->next;
    }

    //加上null
        if(newTail)
        {
            newTail->next = NULL;
        }

    //返回
        return newHead;
}

思路4:单指针法
在这里插入图片描述
思路分析4:yes

struct ListNode* removeElements(struct ListNode* head, int val){
    while (NULL != head && head->val == val) {
        head = head->next;
    }

    if (NULL == head) {
        return head;
    }

    struct ListNode* pre = head;
    while (pre->next != NULL) {
        //找到值为 val 的节点,并将其删除 
        if (pre->next->val == val) {
            pre->next = pre->next->next;   
        } else {
           //继续遍历
            pre = pre->next;
        }
    }
    return head;
}
作者:程序员小熊
链接:https://leetcode.cn/problems/remove-linked-list-elements/solutions/341875/203-yi-chu-lian-biao-yuan-su-you-ya-di-gui-c-yu-ya/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

思路5:递归
在这里插入图片描述
思路分析5:可行。

struct ListNode* removeElements(struct ListNode* head, int val){ 
    //递归指向NULL时候终止,开始回归
    if (NULL == head) {
        return head;
    }     
	//递归结果暂时存储
    head->next = removeElements(head->next, val);
    //三目操作符简化
    return head->val == val ? head->next : head;
}
struct ListNode* removeElements(struct ListNode* head, int val){ 
    if (NULL == head) {
        return head;
    }     

    /* 删除头节点后所有值为 val 的节点 */
    struct ListNode* res = removeElements(head->next, val);

    /* 头节点是待删除的节点 */
    if (head->val == val) {
        return res;
    /* 头节点不是待删除的节点,头节点后面挂接已处理的链表(更短的) */
    } else {
        head->next = res;
        return head;
    }
}

作者:程序员小熊
链接:https://leetcode.cn/problems/remove-linked-list-elements/solutions/341875/203-yi-chu-lian-biao-yuan-su-you-ya-di-gui-c-yu-ya/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

完。

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

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

相关文章

Dynamo更新图元的LocationCurve——群问题整理004

你好,这里是BIM的乐趣,我是九哥~ 近期给大家分享一些短平快的小教程,基本都是来自群里面常问的问题,不做过多的介绍了,直接上截图和代码。 问题004:Dynamo更新图元的LocationCurve 之前有小伙伴问&#…

BUGKU-WEB 源代码

题目描述 题目截图如下&#xff1a; 进入场景看看&#xff1a; 解题思路 你说啥就是啥&#xff1a;去源代码吧 相关工具 URL解码平台&#xff1a;https://www.iamwawa.cn/urldecode.html 解题步骤 随便输入试试 2. 看看源码 存在script&#xff1a; <script> …

软考 系统分析师系列知识点之企业信息化规划(2)

接前一篇文章&#xff1a;软考 系统分析师系列知识点之企业信息化规划&#xff08;1&#xff09; 所属章节&#xff1a; 第7章. 企业信息化战略与实施 第2节. 企业信息化规划 企业信息化建设是一项长期而艰巨的任务&#xff0c;不可能在短时间内完成。因此&#xff0c;企业信息…

提高供应商收发文件效率的同时,如何保障数据的安全流转?

数据文件是制造业企业的核心竞争力&#xff0c;一旦发生数据外泄&#xff0c;就会给企业造成经济损失。之前就出现过像小米二级供应商因对其下游供应商管理不善&#xff0c;泄露了小米汽车前后保险杠的早期设计稿事件。制造业企业与供应商之间业务联系紧密&#xff0c;文件流转…

白话微机:8.解释FPGA以及一些考研面试问题

一. 前言&#xff08;更新世界观&#xff09; 在“微机世界”&#xff0c;普通的城市(单片机)里&#xff0c;人又有一个别的名字叫做“数据”&#xff0c;人有0有1&#xff1b;人们也有住房&#xff0c;这些住房在这个世界叫做“存储器”&#xff1b;地上有路&#xff0c;这些路…

扩展语音识别系统:增强功能与多语言支持

一、引言 在之前的博客中&#xff0c;我们成功构建了一个基于LibriSpeech数据集的英文语音识别系统。现在&#xff0c;我们将对系统进行扩展&#xff0c;增加一些增强功能&#xff0c;并尝试支持多语言识别。 二、增加增强功能 语音合成 --除了语音识别&#xff0c;我们还可以…

四川盐亭清代古寨重现,文物建筑保护引关注

近日&#xff0c;在四川盐亭的五台山深处&#xff0c;一处历经160余年风霜的古山寨遗迹重现天日。寨门巍峨&#xff0c;文字斑驳&#xff0c;诉说着清代同治年间的历史沧桑。然而&#xff0c;岁月侵蚀下&#xff0c;文物保护刻不容缓。温湿度波动等自然因素&#xff0c;对这些珍…

PostgreSQL里实现计算多个数字的排列组合

在进行排列组合的时候&#xff0c;每一次需要知道是否有重复的值&#xff0c;并过滤出已经排列过的值。这个可以创建支持可变参数的函数来实现。下边的函数用到了聚合判断&#xff0c;并且可变参数使用variadic标记的数组。 postgres<16.1>(ConnAs[postgres]:PID[188277…

办公记事常用工具:桌面记事本助你高效记事

在繁忙的办公环境中&#xff0c;我常常感到自己的大脑像是一个不停旋转的陀螺&#xff0c;各种待办事项、会议安排和灵感想法在脑海中交织&#xff0c;仿佛随时都要迸发出来。然而&#xff0c;只靠人脑记忆&#xff0c;不仅辛苦&#xff0c;而且容易出错。在这样的背景下&#…

汇编语言程序设计——基础知识(完整)

文章目录 一、CPU概述:1.1 CPU(中央处理器)和MCU(微处理器 = 单片机)的区别:1.2 CPU是如何工作的:1.2.1 CPU是如何区分内存中的指令和数据的:1.2.1.1 地址总线:1.2.1.2数据总线:1.2.1.3控制总线:二、存储器:2.1 随机存储器(RAM):2.2 只读存储器(ROM):2.3 CPU的…

js设计模式:职责链模式

作用: 可以处理链式调用的业务逻辑,下一步操作需要上一步操作的处理结果 可以使用职责链模式进行解耦操作,按顺序链向下传递,依次向下查找可以处理的业务逻辑 示例: const wjt (expressage) > {if (expressage 《js设计模式从入门到精通》) {return 快递名称:${express…

简单一招,教你高校管理校园门禁!

在当今社会&#xff0c;随着城市化和科技的不断发展&#xff0c;人们对安全管理的需求日益增加。门禁监控系统作为一种现代化、智能化的安全管理工具&#xff0c;正逐渐成为各种场所的必备设施。 客户案例 企业办公大楼 北京某大型企业在其办公大楼部署了泛地缘科技推出的门禁…

才气系统与逻辑系统道装实现的比较

才气系统与逻辑系统道装实现的比较 道装道装思想简介烛火流形学习引擎&#xff0c;流形学习的引入王船山信息熵&#xff0c;简称王船山熵&#xff1b;凝聚态数学可计算函数科学方法道装由来琴语言简介逻辑与才气的逐层比较表格&#xff08;王船山熵&#xff09; 道装 道装思想…

JAVA表达式

1.Java开发工具 IntelliJ IDEA被认为是目前Java开 发效率最快的IDE工具。是 JetBrains公司的产品&#xff0c;这家公司 总部位于捷克共和国的首都布拉格。 它整合了开发过程中实用的众多功 能&#xff0c;智能提示错误&#xff0c;强大的调试工 具&#xff0c;Ant&#xff0c;J…

nginx upstream server主动健康检测模块添加https检测功能[完整版]

目录 1 缘起1.1 功能定义2. 实现后的效果2.1 配置文件2.2 运行效果3. 代码实现3.1 配置指令3.1.1 配置指令定义:3.1.2 配置指令结构体:3.1.3 配置指令源码定义:3.2 模块的初始化3.3 添加新的健康检测类型的定义3.4 握手完成后的处理3. 5 发送http请求3.6 接收http响应3.7 连…

GaiaDB-X 获选北京国家金融科技认证中心「数据领域首批专项示范与先行单位」

2023 年 12 月 21 日至 22 日&#xff0c;「2023北京国际金融安全论坛暨金融科技标准认证生态大会」在北京金融安全产业园举办。百度智能云分布式数据库 GaiaDB-X 产品荣登「数据领域首批专项示范与先行单位」名单&#xff0c;并获得了由北京国家金融科技认证中心颁发的「数据产…

Vue3快速上手(八) toRefs和toRef的用法

顾名思义&#xff0c;toRef 就是将其转换为ref的一种实现。详细请看&#xff1a; 一、toRef 1.1 示例 <script langts setup name"toRefsAndtoRef"> // 引入reactive,toRef import { reactive, toRef } from vue // reactive包裹的数据即为响应式对象 let p…

error: src refspec main does not match any解决办法

一、问题描述&#xff1a; 用GitHub Actions自动部署Hexo&#xff0c;到了最关键的一步&#xff1b;突然报错&#xff1a;error: src refspec main does not match any 1、错误一&#xff1a; main分支应填写为master分支&#xff1b;但是只改这里也会报其他错误 2、错误二&a…

swagger+javax/xml/bind/DatatypeConverter+aop各种问题

文章目录 一、No operations defined in spec!1.问题图片2.解决方法 二、java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter1.问题图片2.解决方法 三、AOP切点不够精确问题1.问题描述2.解决方案 总结 一、No operations defined in spec! 这是swagger报的错&…

turn服务器debug

turn服务器正常能连通的调用堆栈 turn_port.cc AddRequestAuthInfo check 崩溃 有问题的turn msg type是259 request type 是3 用不了的turn 服务器turnmessage type 275