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中的this变量的使用介绍
Oct 21 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
Mar 18 Javascript
JavaScript字符串对象toLowerCase方法入门实例(用于把字母转换为小写)
Oct 17 Javascript
基于d3.js实现实时刷新的折线图
Aug 03 Javascript
AngularJS中过滤器的使用与自定义实例代码
Sep 17 Javascript
JS如何设置元素样式的方法示例
Aug 28 Javascript
AngularJS实现的生成随机数与猜数字大小功能示例
Dec 25 Javascript
基于mpvue小程序使用echarts画折线图的方法示例
Apr 24 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
Jun 10 Javascript
Layui 导航默认展开和菜单栏选中高亮设置的方法
Sep 04 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
Sep 28 Javascript
浅谈layui数据表格判断问题(加入表单元素),设置单元格样式
Oct 26 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
如何限制访问者的ip(PHPBB的代码)
2006/10/09 PHP
php 执行系统命令的方法
2009/07/07 PHP
destoon利用Rewrite规则设置网站安全
2014/06/21 PHP
zend framework框架中url大小写问题解决方法
2014/08/19 PHP
Laravel用户授权系统的使用方法示例
2018/09/16 PHP
Dom与浏览器兼容性说明
2010/10/25 Javascript
jquery获得keycode的示例代码
2013/12/30 Javascript
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
一个简单的Node.js异步操作管理器分享
2014/04/29 Javascript
JQuery插件iScroll实现下拉刷新,滚动翻页特效
2014/06/22 Javascript
JavaScript中的console.trace()函数介绍
2014/12/29 Javascript
浅析JavaScript中的事件机制
2015/06/04 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
详解JavaScript中|单竖杠运算符的使用方法
2016/05/23 Javascript
Vue.js 60分钟快速入门教程
2017/03/28 Javascript
JavaScript实现选中文字提示新浪微博分享效果
2017/06/15 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
2018/09/25 Javascript
微信小程序实现弹出菜单动画
2019/06/21 Javascript
封装Vue Element的table表格组件的示例详解
2020/08/19 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
2020/11/12 Javascript
微信小程序实现列表左右滑动
2020/11/19 Javascript
JS闭包原理及其使用场景解析
2020/12/03 Javascript
[01:52]2020年DOTA2 TI10夏季活动预告片
2020/07/15 DOTA
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
ubuntu中配置pyqt4环境教程
2017/12/27 Python
对python3中, print横向输出的方法详解
2019/01/28 Python
pyhanlp安装介绍和简单应用
2019/02/22 Python
Django框架自定义session处理操作示例
2019/05/27 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
使用python快速在局域网内搭建http传输文件服务的方法
2019/11/14 Python
django序列化serializers过程解析
2019/12/14 Python
详解css position 5种不同的值的用法
2019/07/30 HTML / CSS
医科大学生毕业的自我评价分享
2013/11/12 职场文书
优秀女职工事迹材料
2014/02/06 职场文书
小学生反邪教心得体会
2016/01/15 职场文书
yolov5返回坐标的方法实例
2022/03/17 Python