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添加String.Format方法
Aug 11 Javascript
JavaScript高级程序设计阅读笔记(十六) javascript检测浏览器和操作系统-detect.js
Aug 14 Javascript
从QQ网站中提取的纯JS省市区三级联动菜单
Dec 25 Javascript
JavaScript获取表格(table)当前行的值、删除行、增加行
Jul 03 Javascript
js中javascript:void(0) 真正含义
Nov 05 Javascript
老生常谈 js中this的指向
Jun 30 Javascript
利用JavaScript阻止表单提交的两种方法
Aug 11 Javascript
详解tween.js 中文使用指南
Jan 05 Javascript
Vue CLI3 如何支持less的方法示例
Aug 29 Javascript
vue组件开发props验证的实现
Feb 12 Javascript
JS秒杀倒计时功能完整实例【使用jQuery3.1.1】
Sep 03 jQuery
基于Electron实现桌面应用开发代码实例
Jul 07 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
ASP知识讲座四
2006/10/09 PHP
PHP运行时强制显示出错信息的代码
2011/04/20 PHP
windows下zendframework项目环境搭建(通过命令行配置)
2012/12/06 PHP
3种php生成唯一id的方法
2015/11/23 PHP
PHP函数import_request_variables()用法分析
2016/04/02 PHP
PHP获取文本框、密码域、按钮的值实例代码
2017/04/19 PHP
Laravel框架中Blade模板的用法示例
2017/08/30 PHP
PHP大文件及断点续传下载实现代码
2020/08/18 PHP
利用js对象弹出一个层
2008/03/26 Javascript
IE8 浏览器Cookie的处理
2009/01/31 Javascript
JS图片浏览组件PhotoLook的公开属性方法介绍和进阶实例代码
2010/11/09 Javascript
node.js中的fs.futimesSync方法使用说明
2014/12/17 Javascript
javascript等号运算符使用详解
2015/04/16 Javascript
javascript通过元素id和name直接取得元素的方法
2015/04/28 Javascript
javascript实现鼠标拖动改变层大小的方法
2015/04/30 Javascript
基于jquery css3实现点击动画弹出表单源码特效
2015/08/31 Javascript
jQuery实现浮动层随浏览器滚动条滚动的方法
2015/09/22 Javascript
详解Bootstrap四种图片样式
2016/01/04 Javascript
AngularJS模块学习之Anchor Scroll
2016/01/19 Javascript
JS区分Object与Aarry的六种方法总结
2017/02/27 Javascript
实现Vue的markdown文档可以在线运行的方法示例
2018/12/11 Javascript
vue中添加与删除关键字搜索功能
2019/10/12 Javascript
Js生成随机数/随机字符串的方法小结【5种方法】
2020/05/27 Javascript
PHP网页抓取之抓取百度贴吧邮箱数据代码分享
2016/04/13 Python
Python使用asyncio包处理并发详解
2017/09/09 Python
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
Python语言描述连续子数组的最大和
2018/01/04 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
2018/07/09 Python
python实现Zabbix-API监控
2018/09/17 Python
浅析python3字符串格式化format()函数的简单用法
2018/12/07 Python
python实现实时视频流播放代码实例
2020/01/11 Python
解决ROC曲线画出来只有一个点的问题
2020/02/28 Python
美国体育用品商店:Academy Sports + Outdoors
2020/01/04 全球购物
PHP解析URL是哪个函数?怎么用?
2013/05/09 面试题
值传递还是引用传递
2015/02/08 面试题
关于html选择框创建占位符的问题
2021/06/09 HTML / CSS