数据结构(长期更新)第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 分钟前
【困难】力扣算法题解析LeetCode332:重新安排行程
java·数据结构·经验分享·算法·leetcode·力扣
一匹电信狗14 分钟前
【LeetCode_21】合并两个有序链表
c语言·开发语言·数据结构·c++·算法·leetcode·stl
Gorgous—l18 分钟前
数据结构算法学习:LeetCode热题100-多维动态规划篇(不同路径、最小路径和、最长回文子串、最长公共子序列、编辑距离)
数据结构·学习·算法
一条大祥脚1 小时前
26.1.26 扫描线+数论|因子反演+子序列计数|树套树优化最短路
数据结构·算法
李老师讲编程2 小时前
C++信息学奥赛练习题-杨辉三角
数据结构·c++·算法·青少年编程·信息学奥赛
期末考复习中,蓝桥杯都没时间学了3 小时前
力扣刷题13
数据结构·算法·leetcode
多米Domi0113 小时前
0x3f 第48天 面向实习的八股背诵第五天 + 堆一题 背了JUC的题,java.util.Concurrency
开发语言·数据结构·python·算法·leetcode·面试
故以往之不谏3 小时前
函数--值传递
开发语言·数据结构·c++·算法·学习方法
向哆哆4 小时前
构建跨端健身俱乐部管理系统:Flutter × OpenHarmony 的数据结构与设计解析
数据结构·flutter·鸿蒙·openharmony·开源鸿蒙
独自破碎E5 小时前
【总和拆分 + 双变量遍历】LCR_012_寻找数组的中心下标
数据结构·算法