JavaScript中链表非内置类型,需用对象和引用模拟,核心是节点含data和next指针,适合频繁增删;基本结构含Node类和LinkedList类,支持append、delete等操作,时间复杂度插入O(1)、查找O(n)。
JavaScript 中链表不是内置类型,但可以用对象和引用模拟实现。核心在于每个节点保存数据和指向下一个节点的指针,不依赖连续内存,适合频繁插入/删除的场景。
一个基础单向链表包含 Node(节点)和 LinkedList(链表类)两部分:
data 和 next 属性,next 初始为 null
head(头节点),提供 append、prepend、delete、find 等方法
元素比如在尾部追加节点:
append(data) {
const newNode = new Node(data);
if (!this.head) {
this.head = newNode;
} else {
let current = this.head;
while (current.next) {
current = current.next;
}
current.next = newNode;
}
}
删除指定值的节点需处理头节点特殊情况:
this.head = this.head.next
prev.next = current.next 跳过目标节点虽然日常开发多用数组或 Set/Map,但在以下情况链表思想仍有价值:
进阶实现可增强灵活性:
prev 指针,支持反向遍历,删除操作更高效(无需记录前驱)next 指向头节点,适合实现约瑟夫环、任务调度轮转等场景toArray() 和 fromArray() 方便与主流数据结构互转不复杂但容易忽略的是:JavaScript 的引用特性天然适配链表,关键在明确节点关系、避免循环引用导致内存泄漏,以及根据场景权衡是否真比数组更优。