当前位置:首页 > JavaScript

链表实现js

2026-02-28 20:09:18JavaScript

链表的基本概念

链表是一种线性数据结构,由一系列节点组成,每个节点包含数据部分和指向下一个节点的指针。与数组不同,链表在内存中是非连续存储的,动态增删节点更高效。

单向链表的实现

定义节点类 每个节点包含 valuenext 属性,next 指向下一个节点或 null(尾节点)。

class ListNode {
  constructor(value) {
    this.value = value;
    this.next = null;
  }
}

初始化链表 创建头节点并逐步追加节点。

链表实现js

const head = new ListNode(1);
head.next = new ListNode(2);
head.next.next = new ListNode(3);

链表常用操作

遍历链表 通过循环访问每个节点,直到 nextnull

let current = head;
while (current !== null) {
  console.log(current.value);
  current = current.next;
}

插入节点 在指定位置插入新节点,需调整相邻节点的 next 指针。

链表实现js

function insertAfter(prevNode, value) {
  const newNode = new ListNode(value);
  newNode.next = prevNode.next;
  prevNode.next = newNode;
}

删除节点 修改前驱节点的 next 指针以跳过待删除节点。

function deleteNode(head, value) {
  if (head.value === value) return head.next;
  let current = head;
  while (current.next !== null) {
    if (current.next.value === value) {
      current.next = current.next.next;
      return head;
    }
    current = current.next;
  }
  return head;
}

双向链表的实现

双向链表的节点包含指向前驱和后继的指针。

class DoublyListNode {
  constructor(value) {
    this.value = value;
    this.prev = null;
    this.next = null;
  }
}

插入操作示例 需同时维护 prevnext 指针。

function insertAfter(node, value) {
  const newNode = new DoublyListNode(value);
  newNode.next = node.next;
  newNode.prev = node;
  if (node.next) node.next.prev = newNode;
  node.next = newNode;
}

链表的应用场景

  • 实现队列、栈等抽象数据类型。
  • 内存管理中的动态内存分配。
  • 需要频繁插入/删除的场景(如撤销操作记录)。

性能注意事项

  • 访问元素需遍历,时间复杂度为 O(n)。
  • 插入/删除头部节点为 O(1),其他位置需先查找。
  • 双向链表占用更多内存,但支持反向遍历。

以上代码可直接在浏览器或 Node.js 环境中运行,实现基础的链表功能。实际开发中可根据需求扩展更多方法,如反转链表、检测环等算法。

标签: 链表js
分享给朋友:

相关文章

js实现复制功能

js实现复制功能

使用 document.execCommand 方法 这种方法适用于较旧的浏览器,但在现代浏览器中可能被逐步淘汰。通过创建一个临时的 textarea 元素,将文本内容放入其中,然后执行复制命令。…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

js实现百叶窗

js实现百叶窗

使用CSS和JavaScript实现百叶窗效果 通过CSS动画和JavaScript事件监听可以实现百叶窗效果。核心思路是将内容区域分割为多个条状元素,通过控制它们的展开/折叠状态来模拟百叶窗。…

js实现变形

js实现变形

使用 CSS 和 JavaScript 实现元素变形 在 JavaScript 中实现变形效果通常结合 CSS 的 transform 属性,通过动态修改该属性实现元素的旋转、缩放、倾斜或平移。 基…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <di…