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 相关文章推荐
Javascript insertAfter() 实现函数代码
Oct 12 Javascript
JS模板实现方法
Apr 03 Javascript
Angular 应用技巧总结
Sep 14 Javascript
详解Angular.js指令中scope类型的几种特殊情况
Feb 21 Javascript
Bootstrap表格制作代码
Mar 17 Javascript
深入探究angular2 UI组件之primeNG用法
Jul 26 Javascript
新年快乐! javascript实现超级炫酷的3D烟花特效
Jan 30 Javascript
微信小程序websocket实现即时聊天功能
May 21 Javascript
el-input 标签中密码的显示和隐藏功能的实例代码
Jul 19 Javascript
vue父子模板传值问题解决方法案例分析
Feb 26 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
Aug 17 Javascript
Vue 实现拨打电话操作
Nov 16 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中使用__autoload()自动加载未定义类的实现代码
2013/02/06 PHP
PHP中异常处理的一些方法整理
2015/07/03 PHP
基于PHP后台的Android新闻浏览客户端
2016/05/23 PHP
PHP的Json中文处理解决方案
2016/09/29 PHP
php出租房数据管理及搜索页面
2017/05/23 PHP
如何修改yii2.0自带的user表为其它的表
2017/08/01 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
2017/10/12 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
php+ajax实现文件切割上传功能示例
2020/03/03 PHP
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
2007/04/20 Javascript
js自定义事件代码说明
2011/01/31 Javascript
Javascript查询DBpedia小应用实例学习
2013/03/07 Javascript
js获取当月最后一天实例代码
2013/11/19 Javascript
webpack+vue.js快速入门教程
2016/10/12 Javascript
JavaScript实现清空(重置)文件类型INPUT元素值的方法
2016/11/17 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
世界上最短的数字判断js代码
2019/09/09 Javascript
[06:14]《辉夜杯》外卡赛附加赛 4支战队巡礼
2015/10/23 DOTA
[44:15]DOTA2上海特级锦标赛主赛事日 - 5 败者组决赛Liquid VS EG第二局
2016/03/06 DOTA
python和C语言混合编程实例
2014/06/04 Python
python中global与nonlocal比较
2014/11/21 Python
10款最好的Web开发的 Python 框架
2015/03/18 Python
Ruby使用eventmachine为HTTP服务器添加文件下载功能
2016/04/20 Python
Python探索之修改Python搜索路径
2017/10/25 Python
Python numpy实现数组合并实例(vstack,hstack)
2018/01/09 Python
Flask框架学习笔记之模板操作实例详解
2019/08/15 Python
Python实现粒子群算法的示例
2021/02/14 Python
Html5 video标签视频的最佳实践
2020/02/26 HTML / CSS
麦德龙官方海外旗舰店:德国麦德龙超市
2017/12/23 全球购物
文秘人员工作职责
2014/01/31 职场文书
关于感恩的演讲稿500字
2014/08/26 职场文书
现实表现材料范文
2014/12/23 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
十一月早安语录:把心放轻,人生就是一朵自在的云
2019/11/04 职场文书