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制作的网页侧边弹出框思路及实现代码
May 21 Javascript
AngularJS + Node.js + MongoDB开发的基于高德地图位置的通讯录
Jan 02 Javascript
在jQuery中处理XML数据的大致方法
Aug 14 Javascript
jQuery实现简单的文件上传进度条效果
Mar 26 Javascript
JavaScript中的return语句简单介绍
Dec 07 Javascript
jQuery继承extend用法详解
Oct 10 Javascript
JS批量替换内容中关键词为超链接
Feb 20 Javascript
原生JS实现幻灯片
Feb 22 Javascript
jQuery+vue.js实现的九宫格拼图游戏完整实例【附源码下载】
Sep 12 jQuery
JS+HTML+CSS实现轮播效果
Nov 28 Javascript
node.js基于dgram数据报模块创建UDP服务器和客户端操作示例
Feb 12 Javascript
微信小程序实现下滑到底部自动翻页功能
Mar 07 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(5) 类和对象
2010/02/16 PHP
PHP 中关于ord($str)>0x80的详细说明
2012/09/23 PHP
php中将html中的br换行符转换为文本输入中的换行符
2013/03/26 PHP
Symfony2实现在controller中获取url的方法
2016/03/18 PHP
php中的单引号、双引号和转义字符详解
2017/02/16 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
php获取小程序码的实现代码(B类接口)
2020/06/13 PHP
一些Javascript的IE和Firefox(火狐)兼容性的问题总结及常用例子
2009/05/21 Javascript
JavaScript异步调用定时方法并停止该方法实现代码
2012/03/16 Javascript
js对象关系图 方便dom操作
2012/03/18 Javascript
JQuery文字列表向上滚动的代码
2013/11/13 Javascript
js获取会话框prompt的返回值的方法
2015/01/10 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
javascript表单事件处理方法详解
2016/05/15 Javascript
js操作数据库实现注册和登陆的简单实例
2016/05/26 Javascript
React 项目迁移 Webpack Babel7的实现
2018/09/12 Javascript
微信打开网址添加在浏览器中打开提示的办法
2019/05/20 Javascript
用webpack4开发小程序的实现方法
2019/06/04 Javascript
探索JavaScript中私有成员的相关知识
2019/06/13 Javascript
Layui数据表格判断编辑输入的值,是否为我需要的类型详解
2019/10/26 Javascript
用Python实现通过哈希算法检测图片重复的教程
2015/04/02 Python
python实现比较两段文本不同之处的方法
2015/05/30 Python
Python实现的密码强度检测器示例
2017/08/23 Python
python实现扫描日志关键字的示例
2018/04/28 Python
Tensorflow实现AlexNet卷积神经网络及运算时间评测
2018/05/24 Python
Python Pandas批量读取csv文件到dataframe的方法
2018/10/08 Python
Python文件监听工具pyinotify与watchdog实例
2018/10/15 Python
社会实践自我鉴定
2013/11/07 职场文书
国贸专业的职业规划书
2014/03/15 职场文书
承诺书范文
2014/06/03 职场文书
幼儿园老师新年寄语2015
2014/12/08 职场文书
2015年机关党委工作总结
2015/05/23 职场文书
致创业您:正能量激励人心句子(48条)
2019/08/15 职场文书
导游词之海南-南湾猴岛
2019/10/12 职场文书
python实现网络五子棋
2021/04/11 Python
《杜鹃的婚约》OP主题曲「凸凹」无字幕影像公开
2022/04/08 日漫