JavaScript 双向链表操作实例分析【创建、增加、查找、删除等】


Posted in Javascript onApril 28, 2020

本文实例讲述了JavaScript 双向链表操作。分享给大家供大家参考,具体如下:

一个 双向链表(doubly linked list) 是由一组称为节点的顺序链接记录组成的链接数据结构。每个节点包含两个字段,称为链接,它们是对节点序列中上一个节点和下一个节点的引用

开始节点和结束节点的上一个链接和下一个链接分别指向某种终止节点,通常是前哨节点或null,以方便遍历列表。如果只有一个前哨节点,则列表通过前哨节点循环链接。它可以被概念化为两个由相同数据项组成的单链表,但顺序相反。

class DNode {
 constructor(val) {
  this.val = val;
  this.prev = null;
  this.next = null;
 }
}

增加节点

function add(el) {
  var currNode = this.head;
  while (currNode.next != null) {
    currNode = currNode.next;
  }
  var newNode = new DNode(el);
  newNode.next = currNode.next;
  currNode.next = newNode;
}

查找

function find(el) {
  var currNode = this.head;
  while (currNode && currNode.el != el) {
    currNode = currNode.next;
  }
  return currNode;
}

插入

function (newEl, oldEl) {
  var newNode = new DNode(newEl);
  var currNode = this.find(oldEl);
  if (currNode) {
    newNode.next = currNode.next;
    newNode.prev = currNode;
    currNode.next = newNode;
  } else {
    throw new Error('未找到指定要插入节点位置对应的值!')
  }
}

展示

// 顺序
function () {
  var currNode = this.head.next;
  while (currNode) {
    console.log(currNode.el);
    currNode = currNode.next;
  }
}

// 逆序
function () {
  var currNode = this.head;
  currNode = this.findLast();
  while (currNode.prev != null) {
    console(currNode.el);
    currNode = currNode.prev;
  }
}

删除

function (el) {
  var currNode = this.find(el);
  if (currNode && currNode.next != null) {
    currNode.prev.next = currNode.next;
    currNode.next.prev = currNode.prev;
    currNode.next = null;
    currNode.previous = null;
  } else {
    throw new Error('找不到要删除对应的节点');
  }
}

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
AJAX架构之Dojo篇
Apr 10 Javascript
jQuery 回车事件enter使用示例
Feb 18 Javascript
js 去除字符串第一位逗号的方法
Jun 07 Javascript
分享一则javascript 调试技巧
Jan 02 Javascript
JavaScript实现的背景自动变色代码
Oct 17 Javascript
js编写的treeview使用方法
Nov 11 Javascript
JS遍历对象属性的方法示例
Jan 10 Javascript
原生JS实现日历组件的示例代码
Sep 22 Javascript
详解webpack的proxyTable无效的解决方案
Jun 15 Javascript
vue通过滚动行为实现从列表到详情,返回列表原位置的方法
Aug 31 Javascript
vue + element-ui的分页问题实现
Dec 17 Javascript
mui js控制开关状态、修改switch开关的值方法
Sep 03 Javascript
JS 创建对象的模式实例小结
Apr 28 #Javascript
JavaScript console的使用方法实例分析
Apr 28 #Javascript
Node.js设置定时任务之node-schedule模块的使用详解
Apr 28 #Javascript
JavaScript Date对象功能与用法学习记录
Apr 28 #Javascript
JavaScript 链表定义与使用方法示例
Apr 28 #Javascript
Vue 3.0 全家桶抢先体验
Apr 28 #Javascript
React生命周期原理与用法踩坑笔记
Apr 28 #Javascript
You might like
详解PHP+AJAX无刷新分页实现方法
2015/11/03 PHP
解析WordPress中的post_class与get_post_class函数
2016/01/04 PHP
javascript SocialHistory 检查访问者是否访问过某站点
2008/08/02 Javascript
让任务管理器中的CPU跳舞的js代码
2008/11/01 Javascript
JS面向对象、prototype、call()、apply()
2009/05/14 Javascript
node.js中的http.response.getHeader方法使用说明
2014/12/14 Javascript
JQuery控制radio选中和不选中方法总结
2015/04/15 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
2015/09/12 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
2015/09/21 Javascript
javascript 常用验证函数总结
2016/06/28 Javascript
基于node.js依赖express解析post请求四种数据格式
2017/02/13 Javascript
nodejs开发——express路由与中间件
2017/03/24 NodeJs
Jquery-data的三种用法
2017/04/18 jQuery
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
jQuery+ajax实现动态添加表格tr td功能示例
2018/04/23 jQuery
Angular 利用路由跳转到指定页面的指定位置方法
2018/08/31 Javascript
解决JavaScript中0.1+0.2不等于0.3问题
2018/10/23 Javascript
vue中使用protobuf的过程记录
2018/10/26 Javascript
微信小程序开发之点击按钮退出小程序的实现方法
2019/04/26 Javascript
react中Suspense的使用详解
2019/09/01 Javascript
基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能
2019/11/12 Javascript
Python中for循环和while循环的基本使用方法
2015/08/21 Python
Python学习笔记之if语句的使用示例
2017/10/23 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
Python实现九宫格式的朋友圈功能内附“马云”朋友圈
2019/05/07 Python
python实现复制大量文件功能
2019/08/31 Python
Python3 合并二叉树的实现
2019/09/30 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
深入了解Python enumerate和zip
2020/07/16 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
韩国11街:11STREET
2018/03/27 全球购物
北美领先的智能产品购物网站:Wellbots
2018/06/11 全球购物
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server