目录指南
链表
链表的概念及结构
链表的实现
1.打印链表
2.获取单链表的长度
3.头插法
4.尾插法
5.任意位置输入。第一个数据节点为0号下标
6.查看链表中是否包含关键字key
7.删除第一次出现的关键字为key的节点
8.删除所以值为key的节点
9.清空链表
链表的概念及结构
链表是一种物理存储结构上非连续存储结构,数据元素的逻辑顺序是通过链表中的引用链接次序实现的 。
![[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解_头结点](https://file.cfanz.cn/uploads/png/2022/05/17/1/Xbd7IJe42B.png)
实际中链表的结构非常多样,以下情况组合起来就有8种链表结构:
1.单向、双向
2.带头、不带头
3.循环、非循环
单链表,双向链表
![[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解_链表_02](https://file.cfanz.cn/uploads/png/2022/05/17/1/f40fU45Qdd.png)
![[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解_java_03](https://file.cfanz.cn/uploads/png/2022/05/17/1/0HFFfJ4BA7.png)
虽然有这么多的链表的结构,但是我们重点掌握两种
无头单向非循环链表:结构简单,一般不会单独用来存数据。实际中更多是作为其他数据结构的子结构,如哈 希桶、图的邻接表等等。另外这种结构在笔试面试中出现很多。
![[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解_开发语言_04](https://file.cfanz.cn/uploads/png/2022/05/17/1/d715692Pb8.png)
![[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解_后端_05](https://file.cfanz.cn/uploads/png/2022/05/17/1/121UOVM589.png)
链表的实现
在我们实现链表的接口功能前,我们要先创建两个类,链表类(包含有一个可变的头结点和实现各种功能的接口)和节点类(包含成员属性value和next)
![[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解_java_06](https://file.cfanz.cn/uploads/png/2022/05/17/1/a04fb29beH.png)
![[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解_开发语言_07](https://file.cfanz.cn/uploads/png/2022/05/17/1/740R1VIe2E.png)
下面所写的接口的功能均在链表类中实现
1.打印链表
![[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解_开发语言_08](https://file.cfanz.cn/uploads/png/2022/05/17/1/cG4c08GdB0.png)
2.获取单链表的长度
引用局部变量cur来遍历链表,并引用一个局部变量count来计数,只要节点不为null,那么count就+1,最后返回的count值就是链表长度了。
![[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解_java_09](https://file.cfanz.cn/uploads/png/2022/05/17/1/66Wf99eeee.png)
3.头插法
所谓头插法就是将一个节点插入到头结点的前面。首先我们要先判断一下头结点是否为空,如果为空的话,那么所创建的新节点就直接为头结点;如若不为空,则先把头结点的地址存放到新节点的next中,然后把新节点置为头结点。(注意: 切不可乱了顺序!!!)
![[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解_java_10](https://file.cfanz.cn/uploads/png/2022/05/17/1/8V580FA1c6.png)
4.尾插法
尾插法不同与头插法,尾插法第一次是一定要判断链表是否为空的(也就是判断头结点是否为空),若头节点为空,则要插入的节点就是头结点,若不为空,则引入局部变量cur遍历链表找到最后一个节点,当cur.next为空时,说明找到了最后一个节点,然后让cur中的next指向要插入的节点!!!!!
![[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解_链表_11](https://file.cfanz.cn/uploads/png/2022/05/17/1/D799529b8H.png)
5.任意位置输入。第一个数据节点为0号下标
首先我们需要先判断一下插入位置是否合理,然后我们如果要在任意位置插入一个节点,则必须要先找到插入位置的前一个节点(因为这是单链表,所以无法直接知道),可再写个方法来实现找到要插入位置的前一个节点。
![[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解_开发语言_12](https://file.cfanz.cn/uploads/png/2022/05/17/1/3S68LdFbS1.png)
图些许草率,各位看官不好意思哈,小生画画水平实属不太行!...
![[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解_头结点_13](https://file.cfanz.cn/uploads/png/2022/05/17/1/bNOF67UC2N.png)
6.查看链表中是否包含关键字key
传入关键字key,引入局部变量cur遍历链表,如果在遍历过程中遇到和key相同的元素则返回true,否则返回false。
![[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解_头结点_14](https://file.cfanz.cn/uploads/png/2022/05/17/1/5H69E6aKMS.png)
7.删除第一次出现的关键字为key的节点
首先我们要先判断一下链表是否为空(也就是头节点是否为空),其次我们还要看要删除的key节点是否为头节点,若为头节点,则直接将头结点的引用指向下一个节点,下个节点就成为了头节点;若要删除的key节点不为头节点,则将key节点的前一个节点指向key节点的下一个节点
![[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解_头结点_15](https://file.cfanz.cn/uploads/png/2022/05/17/1/28c396CN14.png)
8.删除所以值为key的节点
它的思想和删除第一次出现的key节点类似,那个是找到一个要删除的节点就直接跳出循环并返回;而这个是遍历整个链表,直到找到所有要删除的key值后才跳出循环。
![[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解_头结点_16](https://file.cfanz.cn/uploads/png/2022/05/17/1/F0e4568K17.png)
9.清空链表
首先引用变量curNext来保存头结点的下一个节点,如果不保存的话,那么当将头结点的next置为空时,将找不到头结点的下个节点,那么便无法把其他节点都置为空,也就无法清空链表了。
最后的最后来个区别
![[java数据结构链表]----初学者一看就会,老手看了都要流泪的究极讲解_链表_17](https://file.cfanz.cn/uploads/png/2022/05/17/1/8559B5A6NW.png)
老铁们给小弟点个赞怎么样?我觉得非常可以!










