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 相关文章推荐
比Jquery的document.ready更快的方法
Apr 28 Javascript
jQuery LigerUI 使用教程表格篇(1)
Jan 18 Javascript
ext中store.load跟store.reload的区别示例介绍
Jun 17 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
Aug 11 Javascript
JavaScript的jQuery库中function的存在和参数问题
Aug 13 Javascript
AngularJS 实现弹性盒子布局的方法
Aug 30 Javascript
读Javascript高性能编程重点笔记
Dec 21 Javascript
Angular中实现树形结构视图实例代码
May 05 Javascript
JS中利用swiper实现3d翻转幻灯片实例代码
Aug 25 Javascript
Javascript快速实现浏览器系统通知
Aug 26 Javascript
vue实现学生录入系统之添加删除功能
Jul 11 Javascript
vue服务端渲染操作简单入门实例分析
Aug 28 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上传图片之时间戳命名(保存路径)
2014/08/15 PHP
php中header设置常见文件类型的content-type
2015/06/23 PHP
php使用json-schema模块实现json校验示例
2019/09/28 PHP
js获取图片长和宽度的代码
2009/11/24 Javascript
Firefox下提示illegal character并出现乱码的原因
2010/03/25 Javascript
Visual Studio中的jQuery智能提示设置方法
2010/03/27 Javascript
关于js datetime的那点事
2011/11/15 Javascript
jQuery Mobile页面跳转后未加载外部JS原因分析及解决
2013/03/18 Javascript
js 得到文件后缀(通过正则实现)
2013/07/08 Javascript
PHP实现的各种中文编码转换类分享
2015/01/23 Javascript
js阻止默认浏览器行为与冒泡行为的实现代码
2016/05/15 Javascript
vue-cli项目如何使用vue-resource获取本地的json数据(模拟服务端返回数据)
2017/08/04 Javascript
利用JS hash制作单页Web应用的方法详解
2017/10/10 Javascript
ES6使用Set数据结构实现数组的交集、并集、差集功能示例
2017/10/31 Javascript
Vue组件化开发思考
2018/02/02 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
js实现随机div颜色位置 类似满天星效果
2019/10/24 Javascript
[49:42]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第一局
2016/03/04 DOTA
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
[01:07:57]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第二场 1月19日
2021/03/11 DOTA
Linux系统(CentOS)下python2.7.10安装
2018/09/26 Python
python判断完全平方数的方法
2018/11/13 Python
django框架使用方法详解
2019/07/18 Python
解决Pycharm的项目目录突然消失的问题
2020/01/20 Python
TensorFlow实现从txt文件读取数据
2020/02/05 Python
零基础学python应该从哪里入手
2020/08/11 Python
Python3如何使用多线程升程序运行速度
2020/08/11 Python
Urban Outfitters英国官网:美国平价服饰品牌
2016/11/25 全球购物
施华洛世奇水晶荷兰官方网站:SWAROVSKI荷兰
2017/05/12 全球购物
德国的各种媒体在线商店:Thalia.de(书籍、电子书、玩具等)
2020/10/08 全球购物
教师试用期自我鉴定
2014/02/12 职场文书
2014社会治安综合治理工作总结
2014/12/04 职场文书
优秀教师先进材料
2014/12/16 职场文书
工厂门卫岗位职责
2015/04/13 职场文书
难以忽视的真相观后感
2015/06/05 职场文书
简述Java中throw-throws异常抛出
2021/08/07 Java/Android