// 创建一个链表
function LinkedList(){// 创建一个Node辅助类,表示需要加入列表的项,它包含一个element属性,即表示需要加入到列表中的值,next属性表示指向下一个节点项目的指针let Node = function(element){this.element = element;this.next = null;};// 长度初始化为0,列表头部初始化为空let length = 0;let head = null;// append方法,向链表尾部追加元素this.append = function(element){let node = new Node(element),current;// 列表中的第一个节点if(head == null){head = node;}else{current = head;// 循环列表,直到找到最后一项while(current.next){current = current.next;}// 找到最后一项,将next值赋给node,建立链接current.next = node;}// 更新列表长度length++;};// insert方法,向列表的特定位置插入一个新的项this.insert = function(position, element){// 检查越界值if(position >=0 && position <=length){// current是对插入元素之后的元素的引用,previous是对插入元素之前的元素的引用let node = new Node(element),current = head,previous,index = 0;// 在第一项位置添加if(position === 0){node.next = current;head = node;}else{while(index++ < position){previous = current;current = current.next;}node.next = current;previous.next =node;}// 更新列表长度length++;return true;}else{return false;}};// removeAt方法:从链表特定位置移除一项this.removeAt = function(position){// 检查越界值if(position > -1 && position < length){let current = head,previous,index = 0;// 移除第一项if(position === 0){head = current.next;}else{while(index++ < position){previous = current;current = current.next;}// 将previous与current的下一项链接起来,跳过current从而移除它previous.next = current.next;}// 更新列表长度length--;return current.element;}else{return null;}};// remove方法:从列表中移除一项this.remove = function(element){let index = this.indexOf(element);// 调用removeAt()方法return this.removeAt(index);};// indexOf方法:返回元素在列表中的索引,如果没有该元素则返回-1;this.indexOf = function(element){let current = head,index = 0;while(current){if(element === current.element){return index;}index++;current = current.next;}return -1;};// isEmpty方法,如果链表中不包含任何元素,则返回true,否则返回falsethis.isEmpty = function(){return length === 0;};// size方法,返回链表中包含的元素个数,与数组的length属性类似this.size = function(){return length;};// getHead方法:返回链表第一个元素this.getHead = function(){return head;};// toSting方法,由于链表使用了Node类,重写了javascript的toString方法,让其只输出元素的值this.toString = function(){let current = head,string = '';while(current){string += current.element + (current.next ? ',':'');current = current.next;}return string;};// print方法,用于在控制台输出链表元素this.print = function(){console.log(this.toString());};
}// 链表的使用
var lnkst = new LinkedList();// 打印链表长度
console.log(lnkst.size());// 给链表添加元素
lnkst.append(1);
lnkst.append(2);
lnkst.append(3);
lnkst.append(4);
lnkst.append(5);// 调用打印方法
lnkst.print();          //输出1,2,3,4,5// 插入元素
lnkst.insert(2,'a');
lnkst.print();          //输出1,2,a,3,4,5// 按位置删除元素
lnkst.removeAt(2);
lnkst.print();          //输出1,2,3,4,5// 按值删除元素
lnkst.remove(5);
lnkst.print();          //输出1,2,3,4//判断是否为空
console.log(lnkst.isEmpty());       //false// 获取头部;
console.log(lnkst.getHead());       //1

  

转载于:https://www.cnblogs.com/dragonir/p/7705005.html

【javascript】数据结构-链表相关推荐

  1. javascript数据结构-链表

    gihtub博客地址 链表 是一种物理存储单元上非连续.非顺序的存储结构,它既可以表示线性结构,也可以用于表示非线性结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的.链表由一系列结点(链表中每 ...

  2. JavaScript数据结构——链表(Linked List)

    概念和结构 链表里面的每个元素都包含着一个指向下一个元素的指针. 链表中的元素在内存中的位置并非像数组那样连续放置,而是动态分配. 链表分为单向链表.双向链表.单向循环链表以及双向循环链表四种. 我们 ...

  3. JavaScript数据结构——散列表(Hash table,也叫哈希表)

    概念和结构 散列表是根据关键码值(Key value)而直接进行访问的数据结构. 若关键字为k,则其值存放在f(k)的存储位置上.由此,不需比较便可直接取得所查记录.称这个对应关系f为散列函数,按这个 ...

  4. JavaScript数据结构与算法——链表详解(下)

    在JavaScript数据结构与算法--链表详解(上)中,我们探讨了一下链表的定义.实现原理以及单链表的实现.接下来我们进一步了解一下链表的其他内容. 1.双向链表 双向链表实现原理图: 与单向链表不 ...

  5. JavaScript数据结构与算法——链表详解(上)

    注:与之前JavaScript数据结构与算法系列博客不同的是,从这篇开始,此系列博客采用es6语法编写,这样在学数据结构的同时还能对ECMAScript6有进一步的认识,如需先了解es6语法请浏览ht ...

  6. JavaScript数据结构与算法(1)(数组、栈、队列、链表)(ES6)

    注意:原教学视频:JavaScript(ES6)数据结构和算法 | JavaScript数据结构与算法 (都是CoderWhy老师的教学) 原作者(笔记)链接:JavaScript 数据结构与算法 | ...

  7. 重读《学习JavaScript数据结构与算法-第三版》- 第6章 链表(一)

    定场诗 伤情最是晚凉天,憔悴厮人不堪言: 邀酒摧肠三杯醉.寻香惊梦五更寒. 钗头凤斜卿有泪,荼蘼花了我无缘: 小楼寂寞新雨月.也难如钩也难圆. 前言 本章为重读<学习JavaScript数据结构 ...

  8. 学习JavaScript数据结构与算法(一):栈与队列

    本系列的第一篇文章: 学习JavaScript数据结构与算法(一),栈与队列 第二篇文章:学习JavaScript数据结构与算法(二):链表 第三篇文章:学习JavaScript数据结构与算法(三): ...

  9. 学习javascript数据结构(三)——集合

    前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...

  10. JavaScript数据结构和算法简述——数组

    为什么先讲数组 数据结构可以简单的被分为线性结构和非线性结构. 线性结构大致包括: 数组(连续存储): 链表(离散存储): 栈(线性结构常见应用,由链表或数组增删和改进功能实现): 队列(线性结构常见 ...

最新文章

  1. oracle的那些事
  2. 01.轮播图之二 :tableView 轮播
  3. hibernate mysql写入中文乱码
  4. linux 分卷压缩命令,linux 分卷压缩命令
  5. 字符内存转成字符串_字符串内存内部
  6. easyUI制作slider小滑块,可拖动和精确输入
  7. C++中如何读取一个数的位数_初中数学:近似数和平均数知识点总结及练习
  8. Linux复习-shell程序设计
  9. 面向生态合作伙伴的实践分享回顾
  10. 从2T-12.8T 一颗芯片全搞定
  11. easyUI的基本知识
  12. 【Java面向对象编程——喂养三种宠物】
  13. LM334芯片到底是恒流源还是温度传感器?
  14. 面试常考的常用数据结构与算法
  15. 成功解决socket.timeout: The read operation timed out问题
  16. 【Angular】Angular开发组件
  17. Eigen/Matlab库矩阵运算方法
  18. iMX6平台MAX9288调试
  19. 擦亮双眼,走出精明网贷投资的第一步
  20. 程序员怎么在短时间内从菜鸟到高级架构师

热门文章

  1. Fabric 学习笔记-架构初探
  2. Android热修复升级探索——SO库修复方案 1
  3. php银行转账,php+mysqli事务控制实现银行转账实例_PHP教程
  4. 关联规则挖掘算法_数据挖掘 | 关联规则分析
  5. 百度超级搜索技巧集锦
  6. 【普及组模拟赛】家族
  7. 大学有哪些专业python_python就业方向有哪些?
  8. 互动整合营销_今天,我们谈谈展会的整合营销!
  9. 重置linux内核,Linux Kernel 驱动非授权重置统计漏洞
  10. 无障碍开发(一)之初认识