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 相关文章推荐
jQuery创建插件的代码分析
Apr 14 Javascript
输入密码检测大写是否锁定js实现代码
Dec 03 Javascript
easyui datagrid 键盘上下控制选中行示例
Mar 31 Javascript
javascript跨域方法、原理以及出现问题解决方法(详解)
Aug 06 Javascript
jQuery的文档处理程序详解
May 10 Javascript
AngularJS包括详解及示例代码
Aug 17 Javascript
JavaScript实现的鼠标响应颜色渐变效果完整实例
Feb 18 Javascript
关于Javascript中document.cookie的使用
Mar 08 Javascript
vue2实现可复用的轮播图carousel组件详解
Nov 27 Javascript
详解Vue快速零配置的打包工具——parcel
Jan 16 Javascript
JavaScript交换两个变量方法实例
Nov 25 Javascript
js实现右键弹出自定义菜单
Sep 08 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 什么是PEAR?(第三篇)
2009/03/19 PHP
php中计算时间差的几种方法
2009/12/31 PHP
php empty函数判断mysql表单是否为空
2010/04/12 PHP
file_get_contents("php://input", "r")实例介绍
2013/07/01 PHP
PHP实现二维数组中的查找算法小结
2018/06/09 PHP
Prototype RegExp对象 学习
2009/07/19 Javascript
基于JQuery的密码强度验证代码
2010/03/01 Javascript
dreamweaver 8实现Jquery自动提示
2014/12/04 Javascript
js实现的彩色方块飞舞奇幻效果
2016/01/27 Javascript
jQuery Ajax 异步加载显示等待效果代码分享
2016/08/01 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
JS实现重新加载当前页面或者父页面的几种方法
2016/11/30 Javascript
angularJS 指令封装回到顶部示例详解
2017/01/22 Javascript
AngularJS遍历获取数组元素的方法示例
2017/11/11 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
JavaScript中this函数使用实例解析
2020/02/21 Javascript
JS实现简易留言板(节点操作)
2020/03/16 Javascript
Python与shell的3种交互方式介绍
2015/04/11 Python
python实现微信接口(itchat)详细介绍
2017/10/23 Python
scrapy-redis的安装部署步骤讲解
2019/02/27 Python
新手如何发布Python项目开源包过程详解
2019/07/11 Python
Python制作微信好友背景墙教程(附完整代码)
2019/07/17 Python
python实现图片九宫格分割
2021/03/07 Python
Python 3.8正式发布重要新功能一览
2019/10/17 Python
IDLE下Python文件编辑和运行操作
2020/04/25 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
速比涛英国官网:Speedo英国
2019/07/15 全球购物
个人简历的自荐信
2013/10/23 职场文书
元旦晚会策划方案
2014/02/18 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
2014年话务员工作总结
2014/11/19 职场文书
文艺委员竞选稿
2015/11/19 职场文书
2016十一国庆节慰问信
2015/12/01 职场文书
先进个人事迹材料(2016推荐版)
2016/03/01 职场文书