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


Posted in Javascript onApril 28, 2020

本文实例讲述了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.3water.com/code/HtmlJsRun测试上述代码运行效果。

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

Javascript 相关文章推荐
js中符号转意问题示例探讨
Aug 19 Javascript
JS回调函数的应用简单实例
Sep 17 Javascript
Active控件问题小结(附解决办法)
Jun 09 Javascript
jQuery实现每隔几条元素增加1条线的方法
Jun 27 Javascript
jQuery实现扑克正反面翻牌效果
Mar 10 Javascript
使用watch监听路由变化和watch监听对象的实例
Feb 24 Javascript
angular4 获取wifi列表中文显示乱码问题的解决
Oct 20 Javascript
详解关于webpack多入口热加载很慢的原因
Apr 24 Javascript
基于layui框架响应式布局的一些使用详解
Sep 16 Javascript
Vue页面切换和a链接的本质区别详解
Nov 12 Javascript
Vue export import 导入导出的多种方式与区别介绍
Feb 12 Javascript
vue中的过滤器及其时间格式化问题
Apr 09 Javascript
JS 创建对象的模式实例小结
Apr 28 #Javascript
JavaScript console的使用方法实例分析
Apr 28 #Javascript
Node.js设置定时任务之node-schedule模块的使用详解
Apr 28 #Javascript
JavaScript Date对象功能与用法学习记录
Apr 28 #Javascript
JavaScript 链表定义与使用方法示例
Apr 28 #Javascript
Vue 3.0 全家桶抢先体验
Apr 28 #Javascript
React生命周期原理与用法踩坑笔记
Apr 28 #Javascript
You might like
php采集内容中带有图片地址的远程图片并保存的方法
2015/01/03 PHP
基于PHP实现栈数据结构和括号匹配算法示例
2017/08/10 PHP
php实现的PDO异常处理操作分析
2018/12/27 PHP
枚举JavaScript对象的函数
2006/12/22 Javascript
使用jQuery Ajax功能时需要注意的一个问题(内存溢出)
2012/05/30 Javascript
javascript学习笔记(十) js对象 继承
2012/06/19 Javascript
JS:window.onload的使用介绍
2013/11/13 Javascript
JavaScript实现多维数组的方法
2013/11/20 Javascript
jquery动态添加删除(tr/td)
2015/02/09 Javascript
使用jQuery实现图片遮罩半透明坠落遮挡
2015/03/16 Javascript
jQuery在线选座位插件seat-charts特效代码分享
2015/08/27 Javascript
整理Javascript事件响应学习笔记
2015/12/02 Javascript
VUE JS 使用组件实现双向绑定的示例代码
2017/01/10 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
webpack使用 babel-loader 转换 ES6代码示例
2017/08/21 Javascript
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
vue router动态路由设置参数可选问题
2019/08/21 Javascript
javascript用defineProperty实现简单的双向绑定方法
2020/04/03 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
使用Python中PDB模块中的命令来调试Python代码的教程
2015/03/30 Python
Python聚类算法之DBSACN实例分析
2015/11/20 Python
Python将多个list合并为1个list的方法
2018/06/27 Python
tensorflow更改变量的值实例
2018/07/30 Python
浅谈python下含中文字符串正则表达式的编码问题
2018/12/07 Python
哈工大自然语言处理工具箱之ltp在windows10下的安装使用教程
2020/05/07 Python
PyCharm中配置PySide2的图文教程
2020/06/18 Python
python求解汉诺塔游戏
2020/07/09 Python
企业门卫岗位职责
2013/12/12 职场文书
党员公开承诺事项
2014/03/25 职场文书
团日活动总结书
2014/05/08 职场文书
高中教师个人总结
2015/02/10 职场文书
本科毕业答辩开场白
2015/05/27 职场文书
任长霞观后感
2015/06/16 职场文书
运动会通讯稿100字
2015/07/20 职场文书
房屋买卖定金协议书
2016/03/21 职场文书