使用JavaScript实现链表的数据结构的代码


Posted in Javascript onAugust 02, 2017

链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)   — 维基百科

上面是维基百科对 链表 的解读。下面我们用 JavaScript 代码对链表的数据结构进行实现

实现Node类表示节点

/**
 * Node 类用来表示节点
 * element 用来保存节点上的数据
 * next 用来保存指向下一个节点的链接
 */
function Node(element) {
 this.element = element;
 this.next = null;
}
LList类提供对链表操作的方法
/**
 * LList 类提供了对链表进行操作的方法
 * 链表只有一个属性,
 * 使用一个 Node 对象来保存该链表的头节点。
 */
class LList {
 constructor() {
  this.head = new Node('head');
 }
 // 查找节点
 find(item) {
  let currNode = this.head;
  while(currNode.element !== item) {
   currNode = currNode.next;
  }
  return currNode;
 }
 // 查找前一个节点
 findPre(item) {
  if(item === 'head') throw new Error('now is head!');
  let currNode = this.head;
  while (currNode.next && currNode.next.element !== item) {
   currNode = currNode.next;
  }
  return currNode;
 }
 // 插入新节点
 insert(newElement, item) {
  let newNode = new Node(newElement);
  let currNode = this.find(item);
  newNode.next = currNode.next;
  currNode.next = newNode;
 }
 // 删除一个节点
 remove(item) {
  let preNode = this.findPre(item);
  if(preNode.next !== null) {
   preNode.next = preNode.next.next;
  }
 }
 // 显示链表中的元素
 display() {
  let currNode = this.head;
  while(currNode.next !== null) {
   console.log(currNode.next.element);
   currNode = currNode.next;
  }
 }
}

测试代码

const list = new LList(); 
// LList { head: Node { element: 'head', next: null } }
list.insert('0', 'head');
list.insert('1', '0');
list.insert('2', '1');
list.insert('3', '2');
list.remove('1');
console.log(list); 
// LList { head: Node { element: 'head', next: Node { element: '0', next: [Object] } } }
console.log(list.display()); // 0 2 3
console.log(list.findPre('1')); 
// Node { element: '0', next: Node { element: '1', next: Node { element: '2', next: [Object] } } }

上面就是用JavaScript对简单链表的数据结构的简单实现:smile:

总结

以上所述是小编给大家介绍的使用JavaScript实现链表的数据结构的代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
javascript打印html内容功能的方法示例
Nov 28 Javascript
js之ActiveX控件使用说明 new ActiveXObject()
Mar 03 Javascript
jQuery插件bgStretcher.js实现全屏背景特效
Jun 05 Javascript
移动Web中图片自适应的两种JavaScript解决方法
Jun 18 Javascript
整理Javascript基础语法学习笔记
Nov 29 Javascript
理解javascript中的MVC模式
Jan 28 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
Jan 18 Javascript
轻松实现jQuery添加删除按钮Click事件
Mar 13 Javascript
基于JS实现移动端左滑删除功能
Jul 28 Javascript
Angular2管道Pipe及自定义管道格式数据用法实例分析
Nov 29 Javascript
用ES6写全屏滚动插件的示例代码
May 02 Javascript
使用 Vue-TCB 快速在 Vue 应用中接入云开发的方法
Feb 10 Javascript
javascript 取小数点后几位几种方法总结
Aug 02 #Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
Aug 02 #Javascript
jQuery接受后台传递的List的实例详解
Aug 02 #jQuery
angular $watch 一个变量的变化(实例讲解)
Aug 02 #Javascript
浅谈ECMAScript6新特性之let、const
Aug 02 #Javascript
js实现前端图片上传即时预览功能
Aug 02 #Javascript
使用JavaScript实现表格编辑器(实例讲解)
Aug 02 #Javascript
You might like
PHP中上传大体积文件时需要的设置
2006/10/09 PHP
PHP下对数组进行排序的函数
2010/08/08 PHP
30个php操作redis常用方法代码例子
2014/07/05 PHP
ThinkPHP 3.2 数据分页代码分享
2014/10/14 PHP
PHP概率计算函数汇总
2015/09/13 PHP
使用JavaScript检测Firefox浏览器是否启用了Firebug的代码
2010/12/28 Javascript
jQuery EasyUI API 中文文档 - NumberBox数字框
2011/10/13 Javascript
javascript中判断一个值是否在数组中并没有直接使用
2012/12/17 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
2015/02/04 Javascript
网站申请不到支付宝接口、微信接口,免接口收款实现方式几种解决办法
2016/12/14 Javascript
Vue数据驱动模拟实现5
2017/01/13 Javascript
Vue Transition实现类原生组件跳转过渡动画的示例
2017/08/19 Javascript
nuxt踩坑之Vuex状态树的模块方式使用详解
2019/09/06 Javascript
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
[05:05]第三天的dota2
2013/07/29 DOTA
[02:08:58]2014 DOTA2国际邀请赛中国区预选赛 Ne VS CIS
2014/05/22 DOTA
[01:29]2017 DOTA2国际邀请赛官方英雄手办展示
2017/03/18 DOTA
[41:52]2018DOTA2亚洲邀请赛3月29日 小组赛A组 TNC VS OpTic
2018/03/30 DOTA
Python中的闭包详细介绍和实例
2014/11/21 Python
python使用urllib2实现发送带cookie的请求
2015/04/28 Python
python使用str & repr转换字符串
2016/10/13 Python
Python实现图片转字符画的代码实例
2019/02/22 Python
OpenCV 模板匹配
2019/07/10 Python
python如何建立全零数组
2020/07/19 Python
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
美国战术品牌:5.11 Tactical
2019/05/01 全球购物
酒店拾金不昧表扬信
2014/01/18 职场文书
父母对孩子说的话
2014/04/12 职场文书
学雷锋活动倡议书
2014/08/30 职场文书
竞选大队干部演讲稿
2014/09/11 职场文书
公司新人试用期自我评价
2014/09/17 职场文书
大学生个人简历自荐信
2015/03/06 职场文书
村主任当选感言
2015/08/01 职场文书
2016年学习雷锋精神广播稿
2015/12/17 职场文书
创业计划书之家教中心
2019/09/25 职场文书