# 链表
和数组相似,又是有序的列表,都是线性结构(有且只有一个前驱,有且只有一个后继)
# 链表的组成
数据单位的名称叫做“结点”,结点和结点的分布,在内存中可以是离散的
在链表中,每一个结点的结构都包括了两部分内容:
- 数据域(存储的是当前结点所存储的数据值)
- 指针域(代表下一个结点-后继结点的引用)
{
// 数据域
val: 1,
// 指针域,指向下一个结点
next: {
val:2,
next: ...
}
}
function ListNode(val) {
this.val = val;
this.next = null;
}
链表的结点间关系是通过 next 指针来维系的。因此,链表元素的添加和删除操作,本质上都是在围绕 next 指针做文章。
# 链表的删除
重点:定位目标结点的前驱结点
const target = node1.next
node1.next = target.next
# 链表节点的创建
在使用构造函数创建结点时,传入 val (数据域对应的值内容)、指定 next (下一个链表结点)即可:
const node = new ListNode(1)
node.next = new ListNode(2)
# 链表节点的插入
// 如果目标结点本来不存在,那么记得手动创建
const node3 = new ListNode(3)
// 把node3的 next 指针指向 node2(即 node1.next)
node3.next = node1.next
// 把node1的 next 指针指向 node3
node1.next = node3