【Leetcode】拿捏链表(一)——206.反转链表、203.移除链表元素

news2025/9/15 0:14:31

作者:一个喜欢猫咪的的程序员

专栏:《Leetcode》

喜欢的话:世间因为少年的挺身而出,而更加瑰丽。                                  ——《人民日报》


目录

206.反转链表 

203.移除链表元素


206.反转链表 

力扣https://leetcode.cn/problems/reverse-linked-list/题目描述:

给你单链表的头节点 head ,请你反转链表,并返回反转后的链表。


 示例:

示例 1:


输入:head = [1,2,3,4,5]
输出:[5,4,3,2,1]
 

 示例 2:

输入:head = [1,2]
输出:[2,1]
 

示例 3:

输入:head = []
输出:[]


思路:

思路一:头插法

设一个变量cur遍历整个链表,并且创建一个新的链表rhead我们将cur一个一个头插进去,但这样会找不到cur的下一个位置,因此我们提前设一个变量next来找cur的下一个位置。

时间复杂度:O(N)                                                            空间复杂度:O(1) 

思路二:递归法

利用递归找到最后一个位置,让他倒置

需要注意的是 n1​ 的下一个节点必须指向空。如果忽略了这一点,链表中可能会产生环。

时间复杂度:O(N)                                                            空间复杂度:O(N) 


代码实现:

思路一:头插法

struct ListNode* reverseList(struct ListNode* head) {
    struct ListNode* cur = head;
    struct ListNode* rhead = NULL;
    while (cur)
    {
        struct ListNode* next = cur->next;
        cur->next = rhead;
        rhead = cur;
        cur = next;
    }
    return rhead;
}

思路二:

struct ListNode* reverseList(struct ListNode* head){
    if (head == NULL || head->next == NULL) {
        return head;
    }
    struct ListNode*newhead=reverseList(head->next);
    head->next->next=head;
    head->next=NULL;
    return newhead;
}

203.移除链表元素

力扣https://leetcode.cn/problems/remove-linked-list-elements/题目描述:

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。


示例:

示例 1:
输入:head = [1,2,6,3,4,5,6], val = 6
输出:[1,2,3,4,5]

示例 2: 

输入:head = [], val = 1
输出:[]
 

示例 3:

输入:head = [7,7,7,7], val = 7
输出:[]


思路:

思路一:尾插迭代法

利用创建一个新的链表newhead,利用cur如果cur->val=val时,让这个cur下来到newhead,否则删掉。

 时间复杂度:O(N)                                                    空间复杂度:O(1)


思路二:递归法

对于给定的链表,首先对除了头节点 head以外的节点进行删除操作,然后判断 head 的节点值是否等于给定的 va。如果 head 的节点值等于va,则head 需要被删除,因此删除操作后的头节点为 head,next如果head的节点值不等于 val,则 head 保留,因此删除操作后的头节点还是 head。上述过程是一个递归的过程。

递归的终止条件是 head 为空,此时直接返回 head。当 head 不为空时,递归地进行删除操作,然后判断 head 的节点值是否等于 val 并决定是否要删除head。

作者:LeetCode-Solution
来源:力扣(LeetCode)

时间复杂度:O(N)                                                    空间复杂度:O(N)


代码实现:

思路一:尾插迭代法

struct ListNode* removeElements(struct ListNode* head, int val) {
    struct ListNode* cur = head;
    struct ListNode* newhead, * tail;
    newhead = tail = NULL;
    if(head==NULL)
{
    return NULL;
}
    while (cur)
    {
        if (cur->val != val)
        {
            if (tail==NULL)
            {
                tail = newhead = cur;
            }
            else
            {
                tail->next = cur;
                tail = cur;
            }
            cur = cur->next;
        }
        else
        {
            struct ListNode* next = cur->next;
            free(cur);
            cur = next;
        }
    }
    if(tail!=NULL)
    tail->next = NULL;
    return newhead;
}

思路二:递归法:

struct ListNode* removeElements(struct ListNode* head, int val) {
    if (head == NULL) {
        return head;
    }
    head->next = removeElements(head->next, val);
    return head->val == val ? head->next : head;
}

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

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

相关文章

“工程化”对于大型数据平台而言,意味着什么?StartDT Hackathon来了

日前,2022 第三季 StartDT Hackathon 正式落下帷幕,以“产品工程化与可扩展性提升”为主题,主攻数据云这个“庞然大物”的工程化难题。 本届黑客松共吸引到 9 组参赛,均在 72 小时内完成项目并提测通过。有“单排孤勇者”&#x…

.NET JIT

定义 即时编译器 (JIT) 是 .NET 中公共语言运行时 (CLR) 的一部分,它负责管理 .NET 程序的执行,而与任何 .NET 编程语言无关。 工作流 特定于语言的编译器将源代码转换为中间语言。 然后,这种中间语言由即时 (JIT) 编译器转换为机器代码。 …

一篇文章学会React

React基础 文章目录React基础React介绍React特点React基本使用安装使用React脚手架(***)生成的项目的目录结构src下的index.js入口文件介绍脚手架中使用ReactJSX什么是JSX产生原因介绍JSX概述JSX语法注意事项JSX语法原理JSX学习声明式渲染条件渲染循环渲…

YOLOX改进

这是yolox的第2季了 如何设计在 mAP 和延迟方面表现良好的单级轻量级检测器?新型的单阶段轻量检测器和各种操作的准确性和延迟。此基础上分别提出了GPU和CPU的最佳操作和架构。一份YOLOX改进的实验报告:如何设计性能优异的单阶段轻量级目标检测器 论文…

Android Studio App自定义控件中视图的构造和测量方法讲解及实战(附源码 实现下拉刷新功能 超详细必看)

需要全部源码或者图片集请点赞关注收藏后评论区留言~~~ 一、视图的构造方法 Android自带的控件往往外观欠佳,开发者常常需要修改某些属性,比如按钮控件Button就有好几个问题,其一字号太小,其二文字颜色太浅,其三字母默…

表白爱心代码

文章目录一、演示(python版)代码二、演示(html版)代码一、演示(python版) 代码 # 在等一句我愿意 import random from math import sin, cos, pi, log from tkinter import *CANVAS_WIDTH 640 # 画布的宽…

hive最近的学习汇总-20221110

下个项目可能要用hive比较多 之前对分区、分桶搞不明白 趁着最近又学习了一下 ps:之前说的prophet在年底前一定会放上来的 hive是基于Hadoop构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop分布式文件系统中的数据&#xff1…

MySQL管理常用工具介绍

1.mysql 该mysql不是指mysql服务,而是指mysql的客户端工具。 -e选项可以在Mysql客户端执行SQL语句,而不用连接到MySQL数据库再执行,对于一些批处理脚本, 这种方式尤其方便。 示例: 2、 mysqladmin mysqladmin 是一个…

大三Web课程设计——悬崖上的波妞(4页) HTML+CSS(可以很好的应付老师的作业)

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置,有div的样式格局,这个实例比较全面,有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…

Java基础系列(八)——线程池详解

目录 线程池详解 什么是线程池?为什么要用线程池? 如何创建线程池 ThreadPoolExecutor类分析 ThreadPoolExecutor 饱和策略 简单的线程池Demo ThreadPoolExecutor线程池新增线程流程 线程池详解 什么是线程池?为什么要用线程池&#…

Word2Vec原理以及实战详解

文章目录前言0、序言(词嵌入介绍)一、Word2vec详解。二、CBOW 和 Skip-Gram详解。2-1、CBOW模型:(已知周围词预测中心词)2-2、Skip-Gram模型(已知中心词预测周围词)2-3、词嵌入的缺点三、Word2vec实战(使用Gensim包&am…

[SQL]视图和权限

有时让用户看到整个基本表是不合适的,出于安全考虑,可能需要向用户隐藏特定的数据。如在instructor关系中隐藏工资值: select ID,name,dept_name from instructor;创建更符合特定用户直觉的个人化的关系集合,如学生成绩表由学生关…

一文学会JavaScript计时事件

文章目录JavaScript 计时事件setInterval() 方法clearInterval() 方法setTimeout() 方法clearTimeout() 方法JavaScript 计时事件 通过使用 JavaScript,我们有能力做到在一个设定的时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时…

Linux--基础命令

一、Linux指令 mkdir(Make Directory):在当前路径下新建一个目录 -p --parents 可以是一个路径名称。此时若路径中的某些目录尚不存在,加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录; ls(List…

Day796.什么是线程数据的强、弱一致性 -Java 性能调优实战

什么是线程数据的强、弱一致性 Hi,我是阿昌,今天学习记录的是关于什么是线程数据的强、弱一致性。 一致性,其实在系统的很多地方都存在数据一致性的相关问题。 除了在并发编程中保证共享变量数据的一致性之外,还有数据库的 ACI…

Autosar基本概念详细介绍

Autosar的由来 在汽车创新应用不断涌现的推动下,当代汽车电子电气(E/E—Electronic/Electrical)架构已经非常复杂,需要有创新的技术突破才能有效地进行管理,满足日益增长的乘客需求和法律要求。这个需求对汽车制造商及…

记一次简单的HTTP绕WAF

0X01 基础知识 关于WAF的问题? 它是我们日常攻防演练必会遇见的,在IOS七层模型中,WAF分为网络层、应用层的,当然还有云 WAF(CDNWAF)这新型类场景的。不同环境下我们绕过WAF的思路也是有所区别的&#xff…

mybatis单框架通用mapper使用(二)

mybatis单框架通用mapper使用(二) 1 查询 1.1 简单查询 1.1.1 查多条 a 用法 接口引用.select(实体类对象引用); //里面实体类对象,里面不为null值的部分就会作为条件被查询,多个条件使用and进行拼接起来 //传入为null就是查询全部的值b 测试代码 Testpublic void t2(){Sq…

直播带货系统源码,居家“神器”不出门就能购物

如今,直播带货的火爆程度已经超出了人们的想象。线下销售行业的卖家也开启了直播带货模式,直播带货的的火爆归根到底还是消费者的购物方式发生的变化。从传统的线下购物到电商购物,再到今天的直接直播带货。从各大数据可以总结,消…

应用密码学期末速通复习

文章目录模运算分数求模负数求模gcd最大公约数逆元分组密码DES加密AES加密操作模式ECB电子密码本CBC分组链接CFB密码反馈OFB输出反馈序列密码A5-1算法RC4算法Hash函数Md5算法SHA-1算法消息认证数字信封公钥密码背包公钥算法RSA公钥算法Rabin公钥算法ElGamal公钥算法ECC公钥算法…