JS双向链表实现与使用方法示例(增加一个previous属性实现)


Posted in Javascript onJanuary 31, 2019

本文实例讲述了JS双向链表实现与使用方法。分享给大家供大家参考,具体如下:

前面一篇讲述了《JS基于对象的链表实现与使用方法》,这里的双向链表通过增加一个previous属性实现。

单链表中若需要查找某一个元素时,必须从第一个元素开始进行查找,而双向链表除开头节点和最后一个节点外每个节点中储存有两个指针,这连个指针分别指向前一个节点的地址和后一个节点的地址,这样无论通过那个节点都能够寻找到其他的节点。

原理如下图所示:

JS双向链表实现与使用方法示例(增加一个previous属性实现)

示例代码:

/*双向链表
* */
function Node(element) {
  this.element = element;
  this.next = null;
  this.previous = null;//双向链表在这里需要增加一个previous属性
}
function LList() {
  this.head = new Node("head");
  this.find = find;
  this.insert = insert;
  this.display = display;
  this.remove = remove;
  this.findLast = findLast;
  this.dispReverse = dispReverse;//将链表反转
}
function dispReverse() {
  var currNode = this.head;
  currNode = this.findLast();
  var nodestr = "";
  while (!(currNode.previous == null)) {
    nodestr += " "+currNode.element;
    currNode = currNode.previous;
  }
  console.log("将链表反转后: "+nodestr);
}
function findLast() {
  var currNode = this.head;
  while (!(currNode.next == null)) {
    currNode = currNode.next;
  }
  return currNode;
}
function remove(item) {
  var currNode = this.find(item);
  if (!(currNode.next == null)) {
    currNode.previous.next = currNode.next;
    currNode.next.previous = currNode.previous;
    currNode.next = null;
    currNode.previous = null;
  }
}
// findPrevious is no longer needed
/*function findPrevious(item) {
 var currNode = this.head;
 while (!(currNode.next == null) &&
 (currNode.next.element != item)) {
 currNode = currNode.next;
 }
 return currNode;
 }*/
function display() {
  var currNode = this.head;
  var nodestr = "";
  while (!(currNode.next == null)) {
    nodestr += " "+currNode.next.element;
    currNode = currNode.next;
  }
  console.log(nodestr);
}
function find(item) {
  var currNode = this.head;
  while (currNode.element != item) {
    currNode = currNode.next;
  }
  return currNode;
}
function insert(newElement, item) {
  var newNode = new Node(newElement);
  var current = this.find(item);
  newNode.next = current.next;
  newNode.previous = current;//双向链表在这里需要设置新节点previous属性
  current.next = newNode;
}
var cities = new LList();
cities.insert("Conway", "head");
cities.insert("Russellville", "Conway");
cities.insert("Carlisle", "Russellville");
cities.insert("Alma", "Carlisle");
cities.display();//Conway Russellville Carlisle Alma
cities.remove("Carlisle");
cities.display();//Conway Russellville Alma
cities.dispReverse();// Alma Russellville Conway

这里使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码,可得如下运行结果:

JS双向链表实现与使用方法示例(增加一个previous属性实现)

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

Javascript 相关文章推荐
jQuery 行级解析读取XML文件(附源码)
Oct 12 Javascript
js/jQuery对象互转(快速操作dom元素)
Feb 04 Javascript
Javascript 数组排序详解
Oct 22 Javascript
jquery实现图片随机排列的方法
May 04 Javascript
JavaScript中setFullYear()方法的使用详解
Jun 11 Javascript
vue2.0数据双向绑定与表单bootstrap+vue组件
Feb 27 Javascript
简单谈谈require模块化jquery和angular的问题
Jun 23 jQuery
jQuery图片查看插件Magnify开发详解
Dec 25 jQuery
前端Vue项目详解--初始化及导航栏
Jun 24 Javascript
微信小程序如何调用图片接口API并居中显示
Jun 29 Javascript
js实现点击图片在屏幕中间弹出放大效果
Sep 11 Javascript
用云开发Cloudbase实现小程序多图片内容安全监测的代码详解
Jun 07 Javascript
JS基于对象的链表实现与使用方法示例
Jan 31 #Javascript
JS栈stack类的实现与使用方法示例
Jan 31 #Javascript
JQuery中queue方法用法示例
Jan 31 #jQuery
JavaScript两种计时器的实例讲解
Jan 31 #Javascript
JavaScript对JSON数组简单排序操作示例
Jan 31 #Javascript
实例讲解v-if和v-show的区别
Jan 31 #Javascript
详解使用angular框架离线你的应用(pwa指南)
Jan 31 #Javascript
You might like
php下将多个数组合并成一个数组的方法与实例代码
2011/02/03 PHP
php图片处理函数获取类型及扩展名实例
2014/11/19 PHP
javascript数组与php数组的地址传递及值传递用法实例
2015/01/22 PHP
PHP中返回引用类型的方法
2015/04/03 PHP
PHP设计模式之PHP迭代器模式讲解
2019/03/22 PHP
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
jQuery层级选择器用法分析
2015/02/10 Javascript
ES6中如何使用Set和WeakSet
2016/03/10 Javascript
jQuery Validate设置onkeyup验证的实例代码
2016/12/09 Javascript
JavaScript实现的浏览器下载文件的方法
2017/08/09 Javascript
bootstrap 点击空白处popover弹出框隐藏实例
2018/01/24 Javascript
Angular5升级RxJS到5.5.3报错:EmptyError: no elements in sequence的解决方法
2018/04/09 Javascript
详解node.js的http模块实例演示
2018/07/12 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
2019/09/06 Javascript
vue中nextTick用法实例
2019/09/11 Javascript
python在windows下实现备份程序实例
2014/07/04 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
Python3.8中使用f-strings调试
2019/05/22 Python
python Dijkstra算法实现最短路径问题的方法
2019/09/19 Python
用python画一只可爱的皮卡丘实例
2019/11/21 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
在tensorflow以及keras安装目录查询操作(windows下)
2020/06/19 Python
Python requests上传文件实现步骤
2020/09/15 Python
python之随机数函数的实现示例
2020/12/30 Python
CSS3支持IE6, 7, and 8的边框border属性
2012/12/28 HTML / CSS
HTML5适合的情人节礼物有纪念日期功能
2021/01/25 HTML / CSS
美国知名的百货清仓店:Neiman Marcus Last Call
2016/08/03 全球购物
Expedia韩国官网:亚洲发展最快的在线旅游门户网站
2018/02/26 全球购物
英国电视和家用电器购物网站:rlrdistribution.co.uk
2018/11/20 全球购物
国培教师自我鉴定
2014/02/12 职场文书
小学生环保演讲稿
2014/04/25 职场文书
电子商务专业自荐信
2014/06/02 职场文书
顶岗实习计划书
2015/01/16 职场文书
工会经费申请报告
2015/05/15 职场文书
正能量励志演讲稿三分钟(范文)
2019/07/11 职场文书
使用pycharm运行flask应用程序的详细教程
2021/06/07 Python