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 相关文章推荐
javascript 函数使用说明
Apr 07 Javascript
javascript 防止刷新,后退,关闭
Aug 07 Javascript
jqgrid 编辑添加功能详细解析
Nov 08 Javascript
jQuery Form 页面表单提交的小例子
Nov 15 Javascript
浅析JavaScript中的类型和对象
Nov 29 Javascript
JS获取文本框,下拉框,单选框的值的简单实例
Feb 26 Javascript
JQuery显示隐藏页面元素的方法总结
Apr 16 Javascript
js密码强度校验
Nov 10 Javascript
详解Angular2 之 结构型指令
Jun 21 Javascript
JavaScript中各数制转换全面总结
Aug 21 Javascript
javascript中神奇的 Date对象小结
Oct 12 Javascript
vue 实现基础组件的自动化全局注册
Dec 25 Vue.js
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 生成随机验证码图片代码
2010/02/08 PHP
PHP面向对象概念
2011/11/06 PHP
PHP读取大文件的几种方法介绍
2016/10/27 PHP
javascript的事件描述
2006/09/08 Javascript
js表数据排序 sort table data
2009/02/18 Javascript
JavaScript Math.ceil() 函数使用介绍
2013/12/11 Javascript
js实现遮罩层弹出框的方法
2015/01/15 Javascript
JavaScript随机生成信用卡卡号的方法
2015/04/07 Javascript
javascript实现的固定位置悬浮窗口实例
2015/04/30 Javascript
Bootstrap每天必学之进度条
2015/11/30 Javascript
jquery获取复选框的值的简单实例
2016/05/26 Javascript
JS数组搜索之折半搜索实现方法分析
2017/03/27 Javascript
基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
2018/01/09 Javascript
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
vue中的mvvm模式讲解
2019/01/31 Javascript
JQuery中queue方法用法示例
2019/01/31 jQuery
面试题:react和vue的区别分析
2019/04/08 Javascript
Vue多环境代理配置方法思路详解
2019/06/21 Javascript
5分钟教你用nodeJS手写一个mock数据服务器的方法
2019/09/10 NodeJs
layui的数据表格+springmvc实现搜索功能的例子
2019/09/28 Javascript
[53:38]OG vs LGD 2018国际邀请赛淘汰赛BO3 第三场 8.26
2018/08/30 DOTA
Python读写Excel文件方法介绍
2014/11/22 Python
介绍Python中几个常用的类方法
2015/04/08 Python
Python中scatter函数参数及用法详解
2017/11/08 Python
TensorFlow 合并/连接数组的方法
2018/07/27 Python
python读取图片任意范围区域
2019/01/23 Python
Flask框架实现的前端RSA加密与后端Python解密功能详解
2019/08/13 Python
详解Python中的分支和循环结构
2020/02/11 Python
日本民宿预约平台:STAY JAPAN
2017/07/01 全球购物
员工试用期考核自我鉴定
2014/04/13 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
刑事申诉状范文
2015/05/20 职场文书
复兴之路观后感
2015/06/02 职场文书
2016保送生自荐信范文
2016/01/29 职场文书
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
2022新作动画《福星小子》释出宣传影片 加入内田真礼&宫野真守配音演出
2022/04/08 日漫