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 相关文章推荐
来自qq的javascript面试题
Jul 24 Javascript
JavaScript中把数字转换为字符串的程序代码
Jun 19 Javascript
js实现倒计时时钟的示例代码
Dec 17 Javascript
jquery动态分页效果堪比时光网
Sep 25 Javascript
node.js中的fs.read方法使用说明
Dec 17 Javascript
JavaScript实现SHA-1加密算法的方法
Mar 11 Javascript
BootStrap 下拉菜单点击之后不会出现下拉菜单(下拉菜单不弹出)的解决方案
Dec 14 Javascript
Three.js如何用轨迹球插件(trackball)增加对模型的交互功能详解
Sep 25 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
Oct 25 Javascript
KOA+egg.js集成kafka消息队列的示例
Nov 09 Javascript
vscode调试node.js的实现方法
Mar 22 Javascript
在vue中使用cookie记住用户上次选择的实例(本次例子中为下拉框)
Sep 11 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 在文件指定行插入数据的代码
2010/05/08 PHP
一键生成各种尺寸Icon的php脚本(实例)
2017/02/08 PHP
PHP实现腾讯与百度坐标转换
2017/08/05 PHP
php二维码生成以及下载实现
2017/09/28 PHP
关于jquery input textare 事件绑定及用法学习
2013/04/03 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
深入理解javascript严格模式(Strict Mode)
2014/11/28 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
webpack4.0 入门实践教程
2018/10/08 Javascript
使用vue-cli3新建一个项目并写好基本配置(推荐)
2019/04/24 Javascript
详解微信小程序回到顶部的两种方式
2019/05/09 Javascript
vue滚动固定顶部及修改样式的实例代码
2019/05/30 Javascript
vue实现滑动到底部加载更多效果
2020/10/27 Javascript
微信小程序 wx:for遍历循环使用实例解析
2019/09/09 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
2019/09/19 Javascript
[46:23]OG vs EG 2018国际邀请赛淘汰赛BO3 第一场 8.23
2018/08/24 DOTA
python操作MongoDB基础知识
2013/11/01 Python
Python中获取对象信息的方法
2015/04/27 Python
python字典快速保存于读取的方法
2018/03/23 Python
python+selenium+chromedriver实现爬虫示例代码
2020/04/10 Python
html5仿支付宝密码框的实现代码
2017/09/06 HTML / CSS
Finishline官网:美国一家领先的运动品牌鞋类、服装零售商
2016/07/20 全球购物
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
护士演讲稿范文
2014/01/05 职场文书
公司成本主管岗位责任制
2014/02/21 职场文书
有关爱国演讲稿
2014/05/07 职场文书
学校学雷锋活动总结
2014/06/26 职场文书
教师求职自荐信范文
2015/03/04 职场文书
2015年公共机构节能宣传周活动总结
2015/03/26 职场文书
2015年学校心理健康教育工作总结
2015/05/11 职场文书
2015年车间管理工作总结
2015/07/23 职场文书
2015年幼儿园班主任个人工作总结
2015/10/22 职场文书
2015年教师个人业务工作总结
2015/10/23 职场文书
python的netCDF4批量处理NC格式文件的操作方法
2022/03/21 Python
bose降噪耳机音能消除人声吗
2022/04/19 数码科技