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 ajax dataType值为text json探索分享
Sep 23 Javascript
文本框回车提交与禁止提交示例
Sep 27 Javascript
iframe窗口高度自适应的实现方法
Jan 08 Javascript
JS实现FLASH幻灯片图片切换效果的方法
Mar 04 Javascript
javascript闭包的理解
Apr 01 Javascript
JavaScript实现在页面间传值的方法
Apr 07 Javascript
JavaScript基础重点(必看)
Jul 09 Javascript
使用JS读取XML文件的方法
Nov 25 Javascript
为输入框加入数字js校验代码分享
Nov 02 Javascript
JS实现数组简单去重及数组根据对象中的元素去重操作示例
Jan 05 Javascript
vue实现2048小游戏功能思路详解
May 09 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
Sep 16 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
js类中获取外部函数名的方法与代码
2007/09/12 Javascript
通过DOM脚本去设置样式信息
2010/09/19 Javascript
JS中处理与当前时间间隔的函数代码
2012/05/23 Javascript
ListBox实现上移,下移,左移,右移的简单实例
2014/02/13 Javascript
jquery自动填充勾选框即把勾选框打上true
2014/03/24 Javascript
IE6中链接A的href为javascript协议时不在当前页面跳转
2014/06/05 Javascript
JS建造者模式基本用法实例分析
2015/06/30 Javascript
JavaScript 链式结构序列化详解
2016/09/30 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
JavaScript数组复制详解
2017/02/02 Javascript
详解nodejs express下使用redis管理session
2017/04/24 NodeJs
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
JavaScript中Require调用js的实例分享
2017/10/27 Javascript
教你搭建按需加载的Vue组件库(小结)
2019/07/29 Javascript
Javascript实现贪吃蛇小游戏(含详细注释)
2020/10/23 Javascript
用Python实现QQ游戏大家来找茬辅助工具
2014/09/14 Python
Python中使用装饰器和元编程实现结构体类实例
2015/01/28 Python
python开发简易版在线音乐播放器
2017/03/03 Python
Python之re操作方法(详解)
2017/06/14 Python
Python3.6.0+opencv3.3.0人脸检测示例
2018/05/25 Python
python使用numpy读取、保存txt数据的实例
2018/10/14 Python
python matplotlib库直方图绘制详解
2019/08/10 Python
使用Keras中的ImageDataGenerator进行批次读图方式
2020/06/17 Python
Keras 中Leaky ReLU等高级激活函数的用法
2020/07/05 Python
基于python模拟bfs和dfs代码实例
2020/11/19 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
Theo + George官方网站:都柏林时尚品牌
2019/04/08 全球购物
机械工程系毕业生求职信
2013/09/27 职场文书
幼儿园教师自我鉴定
2014/03/20 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
导游词之蓬莱长岛
2019/12/17 职场文书
手把手教你怎么用Python实现zip文件密码的破解
2021/05/27 Python
拒绝盗图!教你怎么用python给图片加水印
2021/06/04 Python
JavaScript实现简单拖拽效果
2021/09/15 Javascript
Redis的字符串是如何实现的
2021/10/24 Redis
Win11怎么修改电源模式?Win11修改电源模式的方法
2022/04/05 数码科技