存储多个元素,最常用的数据结构是数组。但是数组有个一缺点,从数组中添加或移除项的成本很高,因为需要移动元素。链表也可以存储有序的元素集合,但是和数组不同,链表中的元素在内存中不是连续放置的。每个元素存储本身节点值和下一个元素的引用,链表的一个好处在于,添加或移除元素的时候不需要移动其他元素。

ok,开始实现我们的数据结构,骨架如下

  function LinkedList() {
var Node = function (val) {
this.val = val;
this.next = null;
}; //Node辅助类
var length = 0;
var head = null;
this.append = function (ele) {}; //追加
this.insert = function (pos, ele) {}; //插入
this.removeAt = function (pos) {}; //移除
this.indexOf = function (ele) {}; //查找元素
this.isEmpty = function () {}; //是否为空
this.size = function () {}; //链表元素个数
this.getHead = function () {}; //链表头
this.toString = function () {}; //转换为字符串
}

首先实现向链表尾部追加元素吧:

this.append = function (ele) {
var node = new Node(ele),
current;
if (head == null) {
head = node;
} else {
current = head;
//找到最后一项
while (current.next) {
current = current.next;
}
//将最后一项的next指向 node
current.next = node;
}
length++; //更新链表长度
}

继续实现链表插入


this.insert = function (pos, ele) {
var node = new Node(ele);
var idx = 0,
previous,
current = head;
// 检查是否越界
if (pos >= 0 && pos <= length) {
if (pos === 0) {
node.next = current;
head = node;
} else {
while (idx < pos) {
previous = current; //保存前一个节点的引用
current = current.next;
idx++;
}
node.next = current; //节点的next指向current
previous.next = node; //前一个节点指向node
length++; //更新数组长度
}
} else {
return false;
}
}

链表的移除:

this.removeAt = function (pos) {
var current = head;
var idx = 0,
previous;
//检查越界
if (pos >= 0 && pos <= length) {
if (pos === 0) {
head = current.next;
} else {
while (idx < pos) {
previous = current;
current = current.next;
idx++;
}
previous.next = current.next; //前一个节点指向下一个节点
}
length--; //更新链表长度
return current.val;
} else {
return null
}
}

其他方法就比较简单了,实现如下:

this.isEmpty = function () {
return !length;
}
this.size = function () {
return length;
}
this.getHead = function () {
return head;
}
this.toString = function () {
var str = '';
var current = head;
while (current) {
str = str + ',' + current.val;
current = current.next;
}
return str.slice(1);
}

js实现个链表吧的更多相关文章

  1. JS实现单链表、单循环链表

    链表 链表是一种物理存储单元上非线性.非连续性的数据结构(它在数据逻辑上是线性的),它的每个节点由两个域组成:数据域和指针域.数据域中存储实际数据,指针域则存储着指针信息,指向链表中的下一个元素或者上 ...

  2. 原生JS实现单向链表

    1.前言 用JS实现一个简单的单向链表,并完成相关的功能 2.功能说明 push(value):从链表尾部添加一个新的节点 insertAfer(value,item):向链表中的item节点之后插入 ...

  3. 用js对象创建链表

    //以下是一个链表类 function LinkedList(){ //Node表示要加入列表的项 var Node=function(element){ this.element=element; ...

  4. js 实现数据结构 -- 链表

    原文: 在 Javascript 中学习数据结构与算法. 概念: 链表存储有序的元素集合,但不同于数组,链表中的元素在内存中并不是连续放置的.每个 元素由一个存储元素本身的节点和一个指向下一个元素的引 ...

  5. js数据结构之链表(单链表、双向链表、循环链表)

    首先,链表有以下特点: 1. 存储空间不固定,可灵活扩充 2.方便多次的插入和删除,效率较高 单链表 单链表是最常用的链表,其对数据的操作均为单项的,向后查找的. /* 链表(基于对象) 此处为单链表 ...

  6. JS实现单向链表、双向链表、循环链表

    https://cloud.tencent.com/developer/article/1114246 链表存储有序的元素的集合,但是和数组不同的是,链表中的元素在内存中的存储并不是连续的.每一个链表 ...

  7. 单链表、循环链表的JS实现

    数据结构系列前言: 数据结构作为程序员的基本知识,需要我们每个人牢牢掌握.近期我也展开了对数据结构的二次学习,来弥补当年挖的坑......   当时上课的时候也就是跟着听课,没有亲自实现任何一种数据结 ...

  8. 用js来实现那些数据结构07(链表01-链表的实现)

    前面讲解了数组,栈和队列.其实大家回想一下.它们有很多相似的地方.甚至栈和队列这两种数据结构在js中的实现方式也都是基于数组.无论增删的方式.遵循的原则如何,它们都是有序集合的列表.在js中,我们新建 ...

  9. js数据结构与算法--单链表的实现与应用思考

    链表是动态的数据结构,它的每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成. 现实中,有一些链表的例子. 第一个就是寻宝的游戏.你有一条线索,这条线索是指向寻找下一条线 ...

随机推荐

  1. 05: 配置yum源

    1.1 将镜像复制到本地创建yum源 1.将准备好的系统镜像放到指定的目录,本次目录指定在:/dawnfs/sourcecode 2.创建挂载目录:mkdir /mnt/yum 3.挂载镜像: mou ...

  2. 基于qml创建最简单的图像处理程序(2)-使用c++&qml进行图像处理

     <基于qml创建最简单的图像处理程序>系列课程及配套代码基于qml创建最简单的图像处理程序(1)-基于qml创建界面http://www.cnblogs.com/jsxyhelu/p/8 ...

  3. 20145206邹京儒MSF基础应用

    20145206邹京儒MSF基础应用 一.MS08_067漏洞渗透攻击实践 实验前准备 1.两台虚拟机,其中一台为kali,一台为windows xp sp3(英文版). 2.在VMware中设置两台 ...

  4. 20145332 拓展:注入shellcode实验

    20145332卢鑫 拓展:注入shellcode实验 shellcode基础知识 Shellcode实际是一段代码(也可以是填充数据),是用来发送到服务器利用特定漏洞的代码,一般可以获取权限.另外, ...

  5. FATFS(A)

    (一),什么是文件管理系统 答:数据在PC上是以文件的形式储存在磁盘中的,这些数据的形式一般为ASCII码或二进制形式.简单点说就是:管理磁盘上的文件的方法的代码! 如:我们写到SD卡上面的数据管理一 ...

  6. deepin linux java开发环境搭建全系列

    一.jdk安装 下载并解压到Java文件,这个文件是我自己放的位置 配置环境变量 第一次使用终端需要设置管理员密码 之后开始设置环境变量 sudo vim /etc/profile :wq 保存并退出 ...

  7. Mysql中unique与primary约束的区别分析(转)

    本文章来给大家介绍在mysql中unique与primary约束的区别分析,unique与primary是我们在创建mysql时常用的类型了,下面我来给大家介绍介绍.   定义了UNIQUE约束的字段 ...

  8. 分布式系统一致性协议--2PC,3PC

    分布式系统中最重要的一块,一致性协议,其中就包括了大名鼎鼎的Paxos算法. 2PC与3PC 在分布式系统中,每一个机器节点虽然能够明确知道自己在进行事务操作过程中的结果是成功或是失败,但是却无法直接 ...

  9. 【附5】springboot之配置文件

    本文转载自http://www.jianshu.com/p/80621291373b,作者:龙白一梦 我的boss 代码从开发到测试要经过各种环境,开发环境,测试环境,demo环境,线上环境,各种环境 ...

  10. React Native 之 定义的组件 (跨文件使用)

    哈哈的~~~今天介绍的是自定义组件 然后去使用这个组件,让这个组件传递这各种文件之间  哈哈  下面开始吧!!!! 我们所要创建的是一个自定义的Button,先创建一个js文件起名为MyButton, ...