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 相关文章推荐
[原创]图片分页查看
Aug 28 Javascript
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
Jul 17 Javascript
js添加table的行和列 具体实现方法
Jul 22 Javascript
jquery append 动态添加的元素事件on 不起作用的解决方案
Jul 30 Javascript
jquery弹出遮掩层效果【附实例代码】
Apr 28 Javascript
JavaScript 基础函数_深入剖析变量和作用域
May 18 Javascript
js 判断数据类型的几种方法
Jan 13 Javascript
vue组件如何被其他项目引用
Apr 13 Javascript
JavaScript学习笔记之数组基本操作示例
Jan 09 Javascript
vue实现点击追加选中样式效果
Nov 01 Javascript
VUEX-action可以修改state吗
Nov 19 Javascript
Element Input输入框的使用方法
Jul 26 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分页示例代码
2007/03/19 PHP
php 购物车的例子
2009/05/04 PHP
php PDO中文乱码解决办法
2009/07/20 PHP
php中处理mysql_fetch_assoc返回来的数组 不用foreach----echo
2011/05/04 PHP
PHP的substr_replace将指定两位置之间的字符替换为*号
2011/05/04 PHP
PHP框架Swoole定时器Timer特性分析
2014/08/19 PHP
PHP Smarty模版简单使用方法
2016/03/30 PHP
js模拟点击事件实现代码
2012/11/06 Javascript
js中的eventType事件及其浏览器支持性介绍
2013/11/29 Javascript
jQuery基础语法实例入门
2014/12/23 Javascript
JavaScript中常见获取元素的方法汇总
2015/03/04 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
2016/05/10 Javascript
jquery心形点赞关注效果的简单实现
2016/11/14 Javascript
Vue+Element使用富文本编辑器的示例代码
2017/08/14 Javascript
vue 1.x 交互实现仿百度下拉列表示例
2017/10/21 Javascript
vue微信分享 vue实现当前页面分享其他页面
2017/12/02 Javascript
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
如何在vue里面优雅的解决跨域(路由冲突问题)
2019/01/20 Javascript
jQuery实现的卷帘门滑入滑出效果【案例】
2019/02/18 jQuery
微信小程序实现动态列表项的顺序加载动画
2019/07/25 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
Vue 3.0 全家桶抢先体验
2020/04/28 Javascript
js仿京东放大镜效果
2020/08/09 Javascript
Python面向对象编程基础解析(一)
2017/10/26 Python
使用pandas对矢量化数据进行替换处理的方法
2018/04/11 Python
python time()的实例用法
2020/11/03 Python
阿玛瑞酒店中文官方网站:Amari.com
2018/02/13 全球购物
庆元旦迎新年广播稿
2014/02/18 职场文书
法制宣传月活动方案
2014/05/11 职场文书
知识改变命运演讲稿
2014/05/21 职场文书
计生工作先进事迹
2014/08/15 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
Pyhton爬虫知识之正则表达式详解
2022/04/01 Python
Oracle使用别名的好处
2022/04/19 Oracle