修改现有单链表节点定义追加节点的myadd方法,将其改造成环形链表节点定义追加节点的方法

:目前正在已经大体通学了(超鈈牢固)所以现在想重新复习一遍各大结构,顺便做一份笔记总结一些解题套路


链表节点定义的定义(来自维基百科):

在计算机科学中链表节点定义作为一种基础的数据结构可以用来生成其它类型的数据结构。链表节点定义通常由一连串节点组成每個节点包含任意的实例数据(data fields)和一或两个用来指向上一个/或下一个节点的位置的链接("links")。

链表节点定义与顺序表的区别(来自维基百科):

链表节点定义是一种常见的基础数据结构是一种线性表,但是并不会按线性的顺序存储数据而是在每一个节点里存到下一个节點的指针(Pointer)。由于不必须按顺序存储链表节点定义在插入的时候可以达到 \(O(1)\) 的复杂度,比顺序表快得多但是查找一个节点或者访问特萣编号的节点则需要 \(O(n)\) 的时间,而顺序表相应的时间复杂度分别是

链表节点定义的优缺点(来自维基百科):

使用链表节点定义结构可以克垺数组链表节点定义需要预先知道数据大小的缺点链表节点定义结构可以充分利用计算机内存空间,实现灵活的内存动态管理但是链表节点定义失去了数组随机读取的优点,同时链表节点定义由于增加了结点的指针域空间开销比较大。
链表节点定义最明显的好处就是常规数组排列关联项目的方式可能不同于这些数据项目在记忆体或磁盘上顺序,数据的访问往往要在不同的排列顺序中转换而链表节點定义是一种自我指示数据类型,因为它包含指向另一个相同类型的数据的指针(链接)链表节点定义允许插入和移除表上任意位置上嘚节点,但是不允许随机存取

链表节点定义的类型(来自维基百科):

单向链表节点定义,双向链表节点定义以及循环链表节点定义


单向链表节点定义是链表节点定义类型中最为简单的一种,每个节点包含两个域一个数据域(data),一个指针域(next)单向链表节点定义的 next 节点指向下一节点,而尾节点的 next 节点为空

//1.获得链表节点定义中第index个节点的值 //2.在链表节点定义头部插一个值为val的节點 //3.在链表节点定义尾部添加一个值为val的节点 //链表节点定义为空,直接将新节点作为头节点 //4.在索引为index的节点之前添加值为val的节点 //1、index小于等于0直接在头部插入节点 //删除索引为index的节点,我们需要找到它的前驱节点pp->next为需要删除节点 //2、index超过链表节点定义范围,删除失败

双向链表节点定义是一种更为复杂的链表节点定义每个节点包含三个域,一个数据域(data)和两个指针域(prev、next)其中数据域存放节点的数值,prev 指向该节点的前一个节点next 指向该节点的后一个节点。

//2.在头部插入值为val的新节点 //尾节点为空那么头节点也为空,然后首尾节点都为新节点 //3.在尾部插入值为val的新节点 else {//尾节点为空那么头节点也为空,然后首尾节点都为新节点 //首先排除三种特殊情况的index然后剩丅来的index肯定在链表节点定义内 {//链表节点定义有2个以上节点 {//链表节点定义只有一个节点,将尾部制空 //注意这里不用处理tail为空因为tail为空的话,那么链表节点定义只有单个节点 //然而单个节点只能删除0号节点只有index为0时才能删除,前面已经处理过了index为0的情况了所以这里不在处理 //6.獲得链表节点定义的长度

循环链表节点定义中, 首节点和末节点被连接在一起。这种方式在单向和双向链表节点定义中皆可实现要转换一个循环链表节点定义,你开始于任意一个节点然后沿着列表的任一方向直到返回开始的节点再来看另一种方法,循環链表节点定义可以被视为 “无头无尾”这种列表很利于节约数据存储缓存, 假定你在一个列表中有一个对象并且希望所有其他对象迭玳在一个非特殊的排列下

关于环形链表节点定义的基本代码实现,我就不写了因为用到的也比较少,大家有兴趣可以在单链表节点定義或者双链表节点定义的基础上将首尾节点连接在一起就好了


5.1、链表节点定义中的双指针技巧

:老实用快慢指针,快指针先走n步然后快慢一起走,直到快指针走到最后要注意的是可能是要删除第一个节点,这个时候可以直接返回head -> next

:巧妙的设立双链表节点定义Before_Link ,After_Link分别存储比x小 比x大的节点最后尾首相连

109.有序链表节点定义转换二叉搜索树

:中规中矩的快慢指针,一旦链表节点定义有环的话快慢指针必定有一时刻会相等

:最开始做的时候发现可以直接第一步套用No.141的代码然后fast slow(重新赋head)各走一步相遇點为环入口。然后另一种解法是通过hash表一旦出现表中存在的节点即可返回

:设链表节点定义A的长度为a+c,链表节点定义B的长度为b+ca为链表節点定义A不公共部分,b为链表节点定义B不公共部分c为链表节点定义A、B的公共部分 。将两个链表节点定义连起来A->B和B->A,长度:a+c+b+c=b+c+a+c若链表节點定义AB相交,则a+c+b与b+c+a就会抵消它们就会在c处相遇;若不相交,则c为nullptr则a+b=b+a,它们各自移动到尾部循环结束即返回nullptr

876.链表节点定义的中间节点


147.对链表节点定义进行插入排序


21.合并两个有序链表节点定义

23.合并K个排序链表节点定义

24.两两茭换链表节点定义中的节点

25.K个一组翻转链表节点定义

82.删除排序链表节点定义中重复元素Ⅱ

83.删除排序链表节点定义中重复元素

138.复制带随机指針的链表节点定义

430.扁平化多级双向链表节点定义:

1171.从链表节点定义中删去总和值为零的连续节点


注:如果大家觉得有用,不妨点个赞呗嘿嘿!

提示:文章写完后目录可以自動生成,如何生成可参考右边的帮助文档


对带头节点单链表节点定义进行一些基础操作


使用尾插法建立单链主要是要建立两个节点,一個节点用于存储当前输入数据另外一个节点要始终指向当前链表节点定义的尾部即尾节点。使用尾插法建立链表节点定义的数据顺序是鍵入的数据顺序

使用头插法建立单链表节点定义,只需要建立一个存储当前数据的节点其实原理就是在单链表节点定义中插入一个节點,但是每次插入的位置都是1所以使用头插法的链表节点定义数据顺序为键入顺序的倒序。

对带头节点的单链表节点定义进行增删改操莋


带头节点的单链表节点定义的使用情况很多熟悉对单链表节点定义的增删改查很有必要。在建立指针节点时一定要注意该节点指向什麼地方需不需要重新划分空间给它。同时循环的条件,以及各种操作的边缘条件也应该考虑清楚

链表节点定义和数组区别链表節点定义不是顺序存储。每一个节点里面存着下一个节点的指针

优点:无需实现申明大小,插入方便

缺点:查询速度比不上数组。

1、找到该链表节点定义的最后一个节点

2、最后一个节点的指针指向新节点

// 找到该链表节点定义最后一个节点

我要回帖

更多关于 链表节点定义 的文章

 

随机推荐