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的switch用法注意事项分析
Feb 02 Javascript
javascript计时器详解
Feb 28 Javascript
avalonjs实现仿微博的图片拖动特效
May 06 Javascript
JQuery+CSS实现图片上放置按钮的方法
May 29 Javascript
基于jQuery实现返回顶部实例代码
Jan 01 Javascript
Javascript基础_简单比较undefined和null 值
Jun 14 Javascript
原生JavaScript实现AJAX、JSONP
Feb 07 Javascript
vue与bootstrap实现时间选择器的示例代码
Aug 26 Javascript
如何将你的AngularJS1.x应用迁移至React的方法
Feb 01 Javascript
layui select动态添加option的实例
Mar 07 Javascript
Angularjs实现数组随机排序的方法
Oct 02 Javascript
原生js实现移动端Touch轮播图的方法步骤
Jan 03 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 导出数据到淘宝助手CSV的方法分享
2010/02/27 PHP
php实现快速排序法函数代码
2012/08/27 PHP
浅析php中jsonp的跨域实例
2013/06/21 PHP
php获得文件大小和文件创建时间的方法
2015/03/13 PHP
PHP rsa加密解密使用方法
2015/04/27 PHP
5款适合PHP使用的HTML编辑器推荐
2015/07/03 PHP
WordPress中制作导航菜单的PHP核心方法讲解
2015/12/11 PHP
PHP实现二维数组根据key进行排序的方法
2016/12/30 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
PHP中危险的file_put_contents函数详解
2017/11/04 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
PHP生成随机字符串实例代码(字母+数字)
2019/09/11 PHP
如何使用jquery动态加载js,css文件实现代码
2013/04/03 Javascript
angularJS 入门基础
2015/02/09 Javascript
javascript HTML+CSS实现经典橙色导航菜单
2016/02/16 Javascript
浏览器复制插件zeroclipboard使用指南
2016/03/26 Javascript
详解Node.js模块间共享数据库连接的方法
2016/05/24 Javascript
原生js的ajax和解决跨域的jsonp(实例讲解)
2017/10/16 Javascript
不使用 JS 匿名函数理由
2017/11/17 Javascript
js实现点击按钮复制文本功能
2020/07/20 Javascript
Angular5中调用第三方库及jQuery的添加的方法
2018/06/07 jQuery
解决mpvue + vuex 开发微信小程序vuex辅助函数mapState、mapGetters不可用问题
2018/08/03 Javascript
基于python的汉字转GBK码实现代码
2012/02/19 Python
python2 与 pyhton3的输入语句写法小结
2018/09/10 Python
Python中logging实例讲解
2019/01/17 Python
Python实现的爬取小说爬虫功能示例
2019/03/30 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
使用python来调用CAN通讯的DLL实现方法
2019/07/03 Python
python config文件的读写操作示例
2019/09/27 Python
如何使用css3实现一个类在线直播的队列动画的示例代码
2020/06/17 HTML / CSS
英国领先的票务代理商之一:The Ticket Factory
2019/02/09 全球购物
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
大四学年自我鉴定
2013/11/13 职场文书
小学元宵节活动总结
2015/02/06 职场文书
导游词范文
2015/02/13 职场文书
大学体育课感想
2015/08/10 职场文书