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 相关文章推荐
javascript实现json页面分页实例代码
Feb 20 Javascript
jQuery+formdata实现上传进度特效遇到的问题
Feb 24 Javascript
jquery实现页面常用的返回顶部效果
Mar 04 Javascript
AngularJS延迟加载html template
Jul 27 Javascript
vue.js使用watch监听路由变化的方法
Jul 08 Javascript
Angular6 写一个简单的Select组件示例
Aug 20 Javascript
ES6 fetch函数与后台交互实现
Nov 14 Javascript
微信小程序提交form操作示例
Dec 30 Javascript
vue学习笔记之给组件绑定原生事件操作示例
Feb 27 Javascript
如何HttpServletRequest文件对象并储存
Aug 14 Javascript
微信小程序自定义yPicker组件实现省市区三级联动功能
Oct 29 Javascript
vue监听滚动事件的方法
Dec 21 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 include的妙用,实现路径加密
2008/07/29 PHP
wamp下修改mysql访问密码的解决方法
2013/05/07 PHP
RGB颜色值转HTML十六进制(HEX)代码的JS函数
2009/04/25 Javascript
推荐17个优美新鲜的jQuery的工具提示插件
2012/09/14 Javascript
javascript实现数字验证码的简单实例
2014/02/10 Javascript
jQuery 中国省市两级联动选择附图
2014/05/14 Javascript
js中的getAttribute方法使用示例
2014/08/01 Javascript
详解JavaScript编程中的数组结构
2015/10/24 Javascript
JavaScript实现给定时间相加天数的方法
2016/01/25 Javascript
JavaScript重载函数实例剖析
2016/05/13 Javascript
jQuery中的siblings()是什么意思(推荐)
2016/12/29 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
微信小程序出现wx.navigateTo页面不跳转问题的解决方法
2017/12/26 Javascript
Vue.directive()的用法和实例详解
2018/03/04 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
微信小程序实现左侧滑动导航栏
2020/04/08 Javascript
jquery validate 实现动态增加/删除验证规则操作示例
2019/10/28 jQuery
如何基于JS截获动态代码
2019/12/25 Javascript
[01:18:31]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第一场 1月10日
2021/03/11 DOTA
python基础教程项目三之万能的XML
2018/04/02 Python
浅析python继承与多重继承
2018/09/13 Python
对Python 简单串口收发GUI界面的实例详解
2019/06/12 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
关于pandas的离散化,面元划分详解
2019/11/22 Python
python-web根据元素属性进行定位的方法
2019/12/13 Python
scrapy redis配置文件setting参数详解
2020/11/18 Python
CSS的background属性及CSS3的背景图片设置总结
2016/06/13 HTML / CSS
检测浏览器是否支持html5视频的代码
2013/03/28 HTML / CSS
浅谈Html5中视频 音频标签 进度条的问题
2016/07/26 HTML / CSS
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
数字漫画:comiXology
2020/06/13 全球购物
家长学校培训材料
2014/08/20 职场文书
2014年领班工作总结
2014/11/25 职场文书
标枪加油稿
2015/07/22 职场文书
单位车辆管理制度
2015/08/05 职场文书