JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】

作者:闭包旅人

时间:2026-10-23

浏览:157

本文详细介绍 JavaScript 中双向链表的实现方法,涵盖节点创建、节点增加、数据查找、节点插入、链表展示及节点删除等核心操作。通过具体代码示例,帮助开发者理解双向链表的内部逻辑与遍历机制,适用于数据结构学习与算法优化场景。

文章目录

本文通过具体实例解析 JavaScript 中双向链表的实现方式,旨在为读者提供可参考的代码实现与操作指南。

双向链表(doubly linked list)是一种由有序节点组成的链接数据结构。每个节点包含两个字段,分别指向序列中的前一个节点和后一个节点,形成双向连接。

链表的起始节点和结束节点的链接字段通常指向终止节点(如哨兵节点或 null),以简化遍历过程。若仅存在一个哨兵节点,列表则通过该节点形成循环。从概念上看,双向链表可视为两条由相同数据项组成但顺序相反的单链表。


class DNode {
 constructor(val) {
  this.val = val;
  this.prev = null;
  this.next = null;
 }
}

增加节点


function add(el) {
  var currNode = this.head;
  while (currNode.next != null) {
    currNode = currNode.next;
  }
  var newNode = new DNode(el);
  newNode.next = currNode.next;
  currNode.next = newNode;
}

查找


function find(el) {
  var currNode = this.head;
  while (currNode && currNode.el != el) {
    currNode = currNode.next;
  }
  return currNode;
}

插入


function (newEl, oldEl) {
  var newNode = new DNode(newEl);
  var currNode = this.find(oldEl);
  if (currNode) {
    newNode.next = currNode.next;
    newNode.prev = currNode;
    currNode.next = newNode;
  } else {
    throw new Error('未找到指定要插入节点位置对应的值!')
  }
}

展示


// 顺序
function () {
  var currNode = this.head.next;
  while (currNode) {
    console.log(currNode.el);
    currNode = currNode.next;
  }
}

// 逆序
function () {
  var currNode = this.head;
  currNode = this.findLast();
  while (currNode.prev != null) {
    console(currNode.el);
    currNode = currNode.prev;
  }
}

删除


function (el) {
  var currNode = this.find(el);
  if (currNode && currNode.next != null) {
    currNode.prev.next = currNode.next;
    currNode.next.prev = currNode.prev;
    currNode.next = null;
    currNode.previous = null;
  } else {
    throw new Error('找不到要删除对应的节点');
  }
}

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.jb51.net/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《JavaScript数学运算用法总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript数组操作技巧总结》、《JavaScript排序算法总结》、《JavaScript遍历算法与技巧总结》、《JavaScript查找算法技巧总结》及《JavaScript错误与调试技巧总结》

希望本文所述对大家JavaScript程序设计有所帮助。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章