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中append、insertBefore、after与insertAfter的简单用法与注意事项
Apr 04 Javascript
jquery 循环显示div的示例代码
Oct 18 Javascript
Knockoutjs 学习系列(二)花式捆绑
Jun 07 Javascript
Avalonjs 实现简单购物车功能(实例代码)
Feb 07 Javascript
BootStrap Table复选框默认选中功能的实现代码(从数据库获取到对应的状态进行判断是否为选中状态)
Jul 11 Javascript
Angular中使用better-scroll插件的方法
Mar 27 Javascript
Vue入门之animate过渡动画效果
Apr 08 Javascript
vue组件横向树实现代码
Aug 02 Javascript
apicloud拉起小程序并传递参数的方法示例
Nov 21 Javascript
详解Vue3.0 前的 TypeScript 最佳入门实践
Jun 18 Javascript
js实现圆形显示鼠标单击位置
Feb 11 Javascript
vue-cli4.0多环境配置变量与模式详解
Dec 30 Vue.js
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设计模式 Builder(建造者模式)
2011/06/26 PHP
PHP 杂谈《重构-改善既有代码的设计》之四 简化条件表达式
2012/04/09 PHP
PHP中如何调用webservice的实例参考
2013/04/25 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
PHP加密函数 Javascript/Js 解密函数
2013/09/23 PHP
thinkphp分页集成实例
2017/07/24 PHP
dojo 之基础篇
2007/03/24 Javascript
百度留言本js 大家可以参考下
2009/10/13 Javascript
JS获取时间的方法
2015/01/21 Javascript
JS使用cookie设置样式的方法
2016/06/30 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
es6在react中的应用代码解析
2017/11/08 Javascript
Vue项目中添加锁屏功能实现思路
2018/06/29 Javascript
Python计算已经过去多少个周末的方法
2015/07/25 Python
Python 性能优化技巧总结
2016/11/01 Python
关于pip的安装,更新,卸载模块以及使用方法(详解)
2017/05/19 Python
Python多线程爬虫实战_爬取糗事百科段子的实例
2017/12/15 Python
Django rest framework实现分页的示例
2018/05/24 Python
Python PIL图片添加字体的例子
2019/08/22 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
Jupyter安装拓展nbextensions及解决官网下载慢的问题
2021/03/03 Python
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
美国渔具店:FishUSA
2019/08/07 全球购物
家乐福台湾线上购物网:Carrefour台湾
2020/09/15 全球购物
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
电气自动化自荐信
2013/10/10 职场文书
简单而又朴实的个人求职信分享
2013/12/12 职场文书
材料加工工程求职信
2014/02/19 职场文书
高中毕业生的个人自我评价
2014/02/21 职场文书
经典英文广告词
2014/03/18 职场文书
2015年度保密工作总结
2015/04/24 职场文书
辩护词范文大全
2015/05/21 职场文书
贷款收入证明范本
2015/06/12 职场文书
消费者投诉书范文
2015/07/02 职场文书
2019终止劳动合同协议书最新范本!
2019/07/09 职场文书
JavaScript canvas实现流星特效
2021/05/20 Javascript