一.链表的类型
1.单链表
💛
什么是单链表?就是由一个个结点链接而成的.
什么样的结点呢?
该节点由两部分组成分别是数据域和指针域(地址)
那么具体的链表是什么样的呢?
2.双链表
⭐️
接下来我们看看什么是双链表,与单链表有什么区别。
双链表:每一个节点有两个指针域,一个指向下一个节点,一个指向上一个节点。
双链表 既可以向前查询也可以向后查询。
来看一看具体的结构:
其实,一看并没有多么复杂,相信同学们都豁然开朗.
3.循环链表
❤️
说到循环链表,顾名思意:就是头节点和末尾结点首尾相连呗.
对的就是这个样子
仔细观看,我们就会发现,其实如果掌握了单链表结构,其他类型的链表我们自然是一通百通了.
二.链表的存储方式
💙💙
说到链表的存储,我们都知道数组的存储是连续的,但是链表在内存中是否也是这样呢.
链表是通过指针域的指针链接在内存中各个节点。
所以链表中的节点在内存中不是连续分布的 ,而是散乱分布在内存中的某地址上,分配机制取决于操作系统的内存管理。
这个链表起始节点为2, 终止节点为7, 各个节点分布在内存个不同地址空间上,通过指针串联在一起。
三.链表的定义
💜💜💜
说了半天,那么我们如何去定义一个链表呢?
下面通过一段代码来说明一下
public class ListNode {
// 结点的值
int val;
// 下一个结点
ListNode next;
// 节点的构造函数(无参)
public ListNode() {
}
// 节点的构造函数(有一个参数)
public ListNode(int val) {
this.val = val;
}
// 节点的构造函数(有两个参数)
public ListNode(int val, ListNode next) {
this.val = val;
this.next = next;
}
}
四.链表的操作
❤️❤️❤️❤️
1.删除结点
如何删除呢,我们只需要将被删除结点的前一个结点直接指向被删除节点的后面的一个结点即可.
例如删除上图中的D结点。
那有同学说了,D节点不是依然存留在内存里么?只不过是没有在这个链表里而已。
java有自己的内存回收机制,就不用自己手动释放了。
2.添加结点
明白删除结点的操作,添加结点就更加的显而易见了.