数据结构(长期更新)第5讲:单链表算法题

数据结构(长期更新)

第5讲:单链表算法题

++跟着潼心走,轻松拿捏C语言,困惑通通走,一去不回头~欢迎开始今天的学++ ++习内容,你的支持就是博主最大的动力++ 。博主主页:潼心1412o-CSDN博客


目录

前言

[5.1 移除链表元素](#5.1 移除链表元素)

[5.2 反转链表](#5.2 反转链表)

[5.3 链表的中间结点](#5.3 链表的中间结点)

[5.4 合并两个有序链表](#5.4 合并两个有序链表)

[5.5 链表的回文结构](#5.5 链表的回文结构)

[5.6 相交链表](#5.6 相交链表)


前言

上节课我们学习了单链表的基本操作,下面我们来进行实战吧,gogogo,出发喽!

5.1 移除链表元素

https://leetcode.cn/problems/remove-linked-list-elements/description/

方法一:遍历链表,发现一个删一个SLTErase

时间复杂度为O(n^2)

方法二:创建一个新链表

不是val就尾插SLTPopback

注意这里并没有真的申请额外的空间创建新链表,而只是创建了两个新指针,改变了指针的指向,

利用的还是原有的节点,所以并没有空间换时间,时间复杂度为O(1)

5.2 反转链表

https://leetcode.cn/problems/reverse-linked-list/description/

方法一:遍历原链表,头插新链表SLTPushfront

方法二:三个指针

创建三个指针n1,n2,n3

在前面两道题试错的过程中,我们需要格外注意空链表和空指针的情况

只要涉及指针成员的访问

即看到两个指针成员访问操作符->和.

就要注意是否会涉及空指针的访问情况

还有就是尾节点next指针是否置空

5.3 链表的中间结点

https://leetcode.cn/problems/middle-of-the-linked-list/description/

方法一:先求一个链表长度SLTSize,再访问中间节点

方法二:快慢指针

慢指针走一步,快指针走两步

5.4 合并两个有序链表

https://leetcode.cn/problems/merge-two-sorted-lists/description/

方法一:遍历l1,和l2比较,指定位置插入SLTInert,时间复杂度O(N^2)

方法二:l1,l2,l3分别遍历两个链表,小的尾插新链表

这里出现了代码冗余的问题

分析其根本原因是需要不停地判空

如何解决?封装函数判空治标不治本

我们可以让链表不可能为空,即加入哨兵头节点,这样就只需要在开始判断list1,list2是否为空

不用每放一次,就判一次当前新链表是不是空,造成空指针访问成员的情况

需要注意的是,newtail,newhead最开始只是申请了一个节点,两个指针,不过是在newtail此节点后指向原有链表的节点,创建新链表,去并没有浪费空间

最后malloc申请的空间还要还回去,并将newhead置空

5.5 链表的回文结构

https://www.nowcoder.com/practice/d281619e4b3e4a60a2cc66ea32855bfa

我们看到这道题目已经明确规定了空间复杂度

方法一:投机取巧法

创建一个数组来存储,反正链表最大长度不超900,那给一个arr[900]就ok

然后再两个指针遍历数组,一前一后比较

方法二:找到中间节点并反转中间节点为头的链表

两个链表逐个比较

5.6 相交链表

https://leetcode.cn/problems/intersection-of-two-linked-lists/description/

先分析题意,链表是否相交,有哪几种情况?发现只有尾节点相同的三种情况

(即相交位置在链表最前 中 最后)

然后解决问题 如何找到交点?

如果交点前长度相同,那么两链表同时遍历n次当next相同可找到

不同就需要计算其长度差

所以整理思路如下:


++好了今天的学习内容就到这里啦,谢谢你的陪伴,我是潼心,下次再见~如果这篇文章对你有帮助的话。请务必给主播一个一键三连,球球了,这对主播很重要~++

博主主页:潼心1412o-CSDN博客

相关推荐
小年糕是糕手14 小时前
【C++】C++入门 -- 输入&输出、缺省参数
c语言·开发语言·数据结构·c++·算法·leetcode·排序算法
chbmvdd14 小时前
week5题解
数据结构·c++·算法
vir0214 小时前
小齐的技能团队(dp)
数据结构·c++·算法·图论
_w_z_j_15 小时前
数组中的最长连续子序列
数据结构·算法
xiaoye-duck17 小时前
数据结构之排序-选择排序&交换排序
数据结构·排序算法
小此方17 小时前
笔记:树。
数据结构·笔记
hweiyu0017 小时前
数据结构:链表
数据结构·链表
前端小L18 小时前
图论专题(十八):“逆向”拓扑排序——寻找图中的「最终安全状态」
数据结构·算法·安全·深度优先·图论·宽度优先
小年糕是糕手20 小时前
【C++】C++入门 -- inline、nullptr
linux·开发语言·jvm·数据结构·c++·算法·排序算法
聆风吟º21 小时前
【数据结构入门手札】算法核心概念与复杂度入门
数据结构·算法·复杂度·算法的特性·算法设计要求·事后统计方法·事前分析估算方法