使用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 相关文章推荐
js单例模式详解实例
Nov 21 Javascript
让checkbox不选中即将选中的checkbox不选中
Jul 11 Javascript
vuejs动态组件给子组件传递数据的方法详解
Sep 09 Javascript
jQuery过滤选择器用法示例
Sep 12 Javascript
利用Node.js制作爬取大众点评的爬虫
Sep 22 Javascript
javascript 正则表达式分组、断言详解
Apr 20 Javascript
Javascript中从学习bind到实现bind的过程
Jan 05 Javascript
手写简单的jQuery雪花飘落效果实例
Apr 22 jQuery
利用js将ajax获取到的后台数据动态加载至网页中的方法
Aug 08 Javascript
JS实现换肤功能的方法实例详解
Jan 30 Javascript
NestJs 静态目录配置详解
Mar 12 Javascript
js实现盒子移动动画效果
Aug 09 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
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
php在文件指定行中写入代码的方法
2012/05/23 PHP
php中sprintf与printf函数用法区别解析
2014/02/17 PHP
php实现网站文件批量压缩下载功能
2015/10/28 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
详谈symfony window下的安装 安装时候出现的问题以及解决方法
2017/09/28 PHP
Yii1.1框架实现PHP极光推送消息通知功能
2018/09/06 PHP
在一个js文件里远程调用jquery.js会在ie8下的一个奇怪问题
2010/11/28 Javascript
jquery 无限级联菜单案例分享
2013/03/26 Javascript
uploadify在Firefox下丢失session问题的解决方法
2013/08/07 Javascript
javaScript实现浮点数转十六进制字符
2013/10/29 Javascript
浅析JavaScript中作用域和作用域链
2016/12/06 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
2017/09/19 Javascript
js 索引下标之li集合绑定点击事件
2018/01/12 Javascript
bootstrap treeview 树形菜单带复选框及级联选择功能
2018/06/08 Javascript
angular2 ng2-file-upload上传示例代码
2018/08/23 Javascript
antd组件Upload实现自己上传的实现示例
2018/12/18 Javascript
JS使用cookie保存用户登录信息操作示例
2019/05/30 Javascript
创建与框架无关的JavaScript插件
2020/12/01 Javascript
vue3.0封装轮播图组件的步骤
2021/03/04 Vue.js
使用PYTHON接收多播数据的代码
2012/03/01 Python
web.py在模板中输出美元符号的方法
2014/08/26 Python
Python判断文件或文件夹是否存在的三种方法
2017/07/27 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
Python中getpass模块无回显输入源码解析
2018/01/11 Python
Python cookbook(数据结构与算法)字典相关计算问题示例
2018/02/18 Python
python tqdm实现进度条的示例代码
2020/11/10 Python
python IP地址转整数
2020/11/20 Python
乌克兰机票、铁路和巴士票、酒店搜索、保险:Tickets.ua
2020/01/11 全球购物
软件测试企业面试试卷
2016/07/13 面试题
最新党员思想汇报
2014/01/01 职场文书
幼儿园中班上学期评语
2014/04/18 职场文书
幼儿生日活动方案
2014/08/27 职场文书
2015年社区宣传工作总结
2015/05/20 职场文书
python保存大型 .mat 数据文件报错超出 IO 限制的操作
2021/05/10 Python
Java 死锁解决方案
2022/05/11 Java/Android