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 相关文章推荐
使用jsonp完美解决跨域问题
Nov 27 Javascript
javascript中的遍历for in 以及with的用法
Dec 22 Javascript
使用AngularJS处理单选框和复选框的简单方法
Jun 19 Javascript
JS判断字符串字节数并截取长度的方法
Mar 05 Javascript
jQuery layui常用方法介绍
Jul 25 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
Nov 21 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
Dec 14 Javascript
Vue+webpack+Element 兼容问题总结(小结)
Aug 16 Javascript
layer.open弹层查看缩略图的原图,自适应大小的实例
Sep 05 Javascript
Vue路由守卫及页面登录权限控制的设置方法(两种)
Mar 31 Javascript
vue Cli 环境删除与重装教程 - 版本文档
Sep 11 Javascript
vue前端工程的搭建
Mar 31 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
jquery 将disabled的元素置为enabled的三种方法
2009/07/25 Javascript
js 实现日期灵活格式化的小例子
2013/07/14 Javascript
node.js中的fs.createReadStream方法使用说明
2014/12/17 Javascript
充分发挥Node.js程序性能的一些方法介绍
2015/06/23 Javascript
JavaScript设计模式经典之命令模式
2016/02/24 Javascript
angularjs表格ng-table使用备忘录
2016/03/09 Javascript
JavaScript组合模式学习要点
2016/08/26 Javascript
EasyUI学习之DataGird分页显示数据
2016/12/29 Javascript
微信小程序  http请求封装详解及实例代码
2017/02/15 Javascript
Vue实现购物车场景下的应用
2017/11/27 Javascript
nodejs结合socket.io实现websocket通信功能的方法
2018/01/12 NodeJs
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
JS正则表达式验证密码强度
2020/03/18 Javascript
python对html代码进行escape编码的方法
2015/05/04 Python
Python中字符串的修改及传参详解
2016/11/30 Python
Python如何快速实现分布式任务
2017/07/06 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
python web.py开发httpserver解决跨域问题实例解析
2018/02/12 Python
PowerBI和Python关于数据分析的对比
2019/07/11 Python
PyCharm导入python项目并配置虚拟环境的教程详解
2019/10/13 Python
Python Charles抓包配置实现流程图解
2020/09/29 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
美国新蛋IT数码商城:Newegg.com
2016/07/21 全球购物
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
伦敦剧院及景点门票:Encore Tickets
2018/07/01 全球购物
初一体育教学反思
2014/01/29 职场文书
学习保证书范文
2014/04/30 职场文书
安全施工标语
2014/06/07 职场文书
开服装店计划书
2014/08/15 职场文书
学习实践科学发展观心得体会
2014/09/10 职场文书
基层党组织整改方案
2014/10/25 职场文书
2016年暑假家长对孩子评语
2015/12/01 职场文书
python plt.plot bar 如何设置绘图尺寸大小
2021/06/01 Python
使用pycharm运行flask应用程序的详细教程
2021/06/07 Python
MySQL 发生同步延迟时Seconds_Behind_Master还为0的原因
2021/06/21 MySQL