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 相关文章推荐
兼容IE和FF的js脚本代码小结(比较常用)
Dec 06 Javascript
JavaScript将页面表格导出为Excel的具体实现
Dec 27 Javascript
JavaScript获取网页表单action属性的方法
Apr 02 Javascript
js实现动态创建的元素绑定事件
Jul 19 Javascript
Bootstrap 模态框(Modal)带参数传值实例
Aug 20 Javascript
JS随机排序数组实现方法分析
Oct 11 Javascript
JavaScript递归函数解“汉诺塔”算法代码解析
Jul 05 Javascript
JavaScript防止全局变量污染的方法总结
Aug 02 Javascript
详解vue 数组和对象渲染问题
Sep 21 Javascript
详解离线安装npm包的几种方法
Nov 25 Javascript
JS实现头条新闻的经典轮播图效果示例
Jan 30 Javascript
对TypeScript库进行单元测试的方法
Jul 18 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读取RSS feed的代码
2008/08/01 PHP
用php实现的获取网页中的图片并保存到本地的代码
2010/01/05 PHP
一个PHP的ZIP压缩类分享
2014/05/04 PHP
PHP实现数组转JSon和JSon转数组的方法示例
2018/06/14 PHP
js判读浏览器是否支持html5的canvas的代码
2013/11/18 Javascript
基于javascript的JSON格式页面展示美化方法
2014/07/02 Javascript
JavaScript随机生成信用卡卡号的方法
2015/04/07 Javascript
jQuery实现最简单的切换图效果【可兼容IE6、火狐、谷歌、opera等】
2016/09/04 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
jquery滚动条插件(可以自定义)
2016/12/11 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
2017/06/30 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
JS 实现百度搜索功能
2018/02/01 Javascript
VUE + UEditor 单图片跨域上传功能的实现方法
2018/02/08 Javascript
详解用Node.js写一个简单的命令行工具
2018/03/01 Javascript
详解从买域名到使用pm2部署node.js项目全过程
2018/03/07 Javascript
JS封装的模仿qq右下角消息弹窗功能示例
2018/08/22 Javascript
vue 实现特定条件下绑定事件
2019/11/09 Javascript
以windows service方式运行Python程序的方法
2015/06/03 Python
Python批量创建迅雷任务及创建多个文件
2016/02/13 Python
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
批量将ppt转换为pdf的Python代码 只要27行!
2018/02/26 Python
Python中的Numpy矩阵操作
2018/08/12 Python
python+selenium实现自动抢票功能实例代码
2018/11/23 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
如何用OpenCV -python3实现视频物体追踪
2019/12/04 Python
Python networkx包的实现
2020/02/14 Python
python:解析requests返回的response(json格式)说明
2020/04/30 Python
css3 transform属性详解
2014/09/30 HTML / CSS
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
捐款倡议书怎么写
2014/05/13 职场文书
廉洁自律演讲稿
2014/05/22 职场文书
2014年大学宣传部工作总结
2014/12/19 职场文书
召开会议通知范文
2015/04/15 职场文书
2015年班组建设工作总结
2015/05/13 职场文书
一年级下册数学教学反思
2016/02/16 职场文书