数据结构(长期更新)第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博客

相关推荐
papership6 小时前
【入门级-数据结构-3、特殊树:完全二叉树的数组表示法】
数据结构·算法·链表
smj2302_796826526 小时前
解决leetcode第3911题.移除子数组元素后第k小偶数
数据结构·python·算法·leetcode
山甫aa6 小时前
差分数组 ----- 从零开始的数据结构
数据结构
早日退休!!!6 小时前
《数据结构选型指南》笔记
数据结构·数据库·oracle
丑八怪大丑7 小时前
Java数据结构与集合源码
数据结构
一个爱编程的人15 小时前
一个数是不是素数
数据结构·算法
忡黑梨15 小时前
eNSP_从直连到BGP全网互通
c语言·网络·数据结构·python·算法·网络安全
地球资源数据云16 小时前
1900-2023年中国物种分布点位矢量数据集
大数据·数据结构·数据库·数据仓库·人工智能
AI人工智能+电脑小能手17 小时前
【大白话说Java面试题】【Java基础篇】第20题:HashMap在计算index的时候,为什么要对数组长度做减1操作
java·开发语言·数据结构·后端·面试·哈希算法·hash-index
牢姐与蒯17 小时前
cpp数据结构之map
数据结构