1. 什么是链表
链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。 -- 引自百度百科
个人理解:JS当中的原型链就是链表结构,只不过原型链是一个更为复杂的链表。可以理解为以下图示情况。
// 用JS代码描述上图图示
const linkNode = {
val: 1,
next: {
val: 2,
next: {
val: 3,
next: null
}
}
}
1.1 特点
- 链表中的每个节点至少包含两个部分:数据域与指针域
- 链表中的每个节点,通过指针域的值,形成一个线性结构
- 查找节点O(n),插入节点O(1),删除节点O(1)
- 不适合快速的定位数据,适合动态的插入和删除数据的应用场景
1.2 其他
- 单向链表
- 双向链表
- 环形链表
2. JS实现链表
- 使用类的方式
class LinkNode {
val = null;
next = null;
constructor(val, next = null) {
if (next !== null && !next instanceof LinkNode) throw new Error('next必须是null或者LinkNode对象');
this.val = val;
this.next = next;
}
}
const linkNode = new LinkNode(2);
linkNode.next = new LinkNode(3);
linkNode.next.next = new LinkNode(4);
console.log(linkNode);
3. 算法题
4. 应用场景
- 操作系统内的动态内存分配
- LRU缓存淘汰算法