在链表题中acwing及力扣一般都给的是不带头结点的链表
前置知识
01.删除链表的结点
题目:设计一个递归算法,删除不带头结点的单链表L中所有值为x的结点。
02.删除带头结点的链表的结点
题目:在带头结点的单链表L中,删除所有值为x的结点,并释放其空间,假设值为x的结点不唯一,试编写算法以实现上述操作。
03.从尾到头打印链表
题目:设L为带头结点的单链表,编写算法实现从头到尾反向输出每个结点的值。
04.删除链表的最小值结点
题目:试编写在带头结点的单链表L中删除一个最小值结点的高效算法(假设最小值节点是唯一的)。
05.反转链表
题目:试编写算法将带头结点的单链表就地逆置,所谓就地是指辅助空间复杂度为O(1)。
06.链表排序
题目:有一个带头结点的单链表L,设计一个算法使其元素递增有序。
07.
题目:设在一个带表头结点的单链表中所有元素结点的数据值无序,试编写一个函数,删除表中所有介于给定的两个值(作为函数参数给出)之间的元素的元素(若存在)。
08.相交链表
题目:给定两个单链表,编写算法找出两个链表的公共结点。
09.链表排序
题目:给定一个带头结点的单链表,设head为头指针,结点结构为(data,next),data为整型元素,next为指针,试写出算法:按递增次序输出单链表中各结点的数据元素,并释放结点所占的存储空间(要求:不允许使用数组作为辅助空间)。
10.
题目:将一个带头结点的单链表A分解为两个带头结点的单链表A和B,使得A表中含有原表中序号为奇数的元素,而B表中含有原表中序号为偶数的元素,且保持其相对顺序不变。
11.
题目:设C={a1,b1,a2,b2,…,an,bn}为线性表,采用带头结点的单链表存放,设计一个就地算法,将其拆分为两个线性表,使得A={a1,a2,…,an},B={bn,…,b2,b1}。
12.删除链表中重复的节点
题目:在一个递增有序的线性表中,有数值相同的元素存在。若存储方式为单链表,设计算法去掉数值相同的元素,使表中不再有重复的元素,例如(7,10,10,21,30,42,42,42,51,70)将变为(7,10,21,30,42,51,70)。
13.合并两个有序链表
题目:假设有两个元素按值递增次序排列的线性表,均以单链表形式存储。请编写算法将这两个单链表归并为一个按元素值递减次序排列的单链表,并要求利用原来两个单链表的结点存放归并后的单链表。
合并为递增版本:
14.
题目:设A和B是两个单链表(带头结点),其中元素递增有序。设计一个算法从A和B中的公共元素产生单链表C,要求不破坏A、B的结点。
15.
题目:已知两个链表A和B分别表示两个集合,其元素递增排列。编制函数,求A与B的交集,并存放于A链表中。
16.
题目:两个整数序列A=a1,a2,a3,…,am和B=b1,b2,b3,…,bn已经存入两个单链表中,设计一个算法,判断序列B是否是序列A的连续子序列。
17.
题目:设计一个算法用于判断带头结点的循环双链表是否对称。
18.
题目:有两个循环单链表,链表头指针分别为h1和h2,编写一个函数将链表h2链接到链表h1之后,要求链接后的链表仍保持循环链表形式。
19.
题目:设有一个带头结点的循环单链表,其结点值均为正整数。设计一个算法,反复找出单链表中结点值最小的结点并输出,然后将该结点从中删除,直到单链表空为止,再删除表头结点。
20.
题目:设头指针为L的带有表头结点的非循环双向链表,其每个结点中除有pre(前驱指针)、data(数据)和next(后继指针)域外,还有一个访问频度域freq。在链表被启用前,其值均初始化为零。每当在链表中进行一次Locate(L,x)运算时,另元素值为x的结点中freq域的值增1,并使此链表中结点保持按访问频度非增(递减)的顺序排列,同时最近访问的结点排在频度相同的结点前面,以便使频繁访问的结点总是靠近表头。试编写复合上述要求的Locate(L,x)运算的算法,该运算为函数过程,返回找到的结点的地址,类型为指针型。
21.链表是否存在环
题目:单链表有环,是指单链表的最后一个结点的指针指向了链表中的某个节点(通常单链表的最后一个结点的指针域是空的)。试编写算法判断单链表是否存在环。
1)给出算法的基本设计思想。
2)根据设计思想,采用C或C++语言描述算法,关键之处给出注释。
3)说明你所设计算法的时间复杂度和空间复杂度。
22.
题目:链表中倒数第k个结点

23.相交链表
题目:

24.删除链表中绝对值相等的结点
题目:
25
题目:
本文讨论了链表的各种操作,包括在不带头结点和带头结点的链表中删除特定值的结点,从尾到头打印链表,删除最小值结点,反转链表,链表排序,以及处理两个链表的交点和合并。这些题目涉及递归算法和高效数据结构操作,旨在提升编程技能。

1万+

被折叠的 条评论
为什么被折叠?



