文档章节

JS数据结构与算法--单向链表

o
 osc_odyg6b92
发布于 2018/07/13 10:28
字数 319
阅读 3
收藏 0

「深度学习福利」大神带你进阶工程师,立即查看>>>

链表结构:链表中每个元素由一个存储元素本身的节点和一个指向下一元素的引用组成。如下所示(手画的,比较丑,懒得用工具画了,嘻嘻)

1.append方法,向链表末尾插入一个节点

2.insert(position,element),向指定位置插入一个节点

3.removeAt(position)移除某个位置上的节点

具体实现代码如下:

"use strict";

class Node {
    constructor(element) {
        this.element = element;
        this.next = null;
    }
}
/**
 * 单向链表
 */
class LinkedList {
    constructor() {
        this.length = 0;
        this.head = null;
    }

    append(element) {
        let node = new Node(element),
            current;
        if (this.getHead() === null) {  //判断链表是否为空
            this.head = node;
        }
        else {
            current = this.getHead();
            while (current.next) { //最后一项的next=null
                current = current.next;
            }
            current.next = node;
        }

        this.length++;
    }


    insert(position, element) {
        if (position >= 0 && position <= this.size()) {   //检查边界
            let node = new Node(element),
                current = this.head,
                index = 0,
                previous;
            if (position === 0) {   //插入第一项
                this.head = node;
                node.next = current;
            }
            else {
                while (index++ < position) {
                    previous = current;
                    current = current.next;

                }
                node.next = current;
                previous.next = node;
            }

            this.length++;
            return true;
        }
        else {
            return false;
        }
    }

    removeAt(position) {
        if (position >= 0 && position <= this.length) {
            let current = this.head,
                index = 0,
                previous;
            if (position === 0) {
                this.head = current.next;
            }
            else {
                while (index++ < position) {
                    previous = current;
                    current = current.next;
                }
                previous.next = current.next;
            }
            this.length--;
            return current.element;
        }
        else {
            return null;
        }
    }

    indexOf(element) {
        let current = this.getHead(), index=0;
        while (current) {
            if(current.element===element){
                return index;
            }
            index++;
            current = current.next;
        }
        return -1;
    }

    remove(element) {
        let position = this.indexOf(element);
        return this.removeAt(position);
    }

    getHead() {
        return this.head;
    }

    isEmpty() {
        return this.length === 0;
    }

    size() {
        return this.length;
    }

    toString() {

        let current = this.getHead(),
            string = '';

        while (current) {
            string += current.element + (current.next ? ', ' : '');
            current = current.next;
        }
        return string;

    }

    print() {
        console.log(this.toString());
    }
}

  

上一篇: python使用元类
o
粉丝 1
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
代码生成器--Codgen

Codgen是一个基于数据库元数据模型,使用freemarker模板引擎来构建输出的代码生成器。freemarker的数据模型结构通常来说都是一个Map树状结构模型,codgen也不例外,它的数据模型这棵树的根节...

黄天政
2013/01/29
1.4W
2
C++模板库--C++ B-tree

这是一个google开源的C++模板库,实现了基于B-tree数据结构的有序内存容器。类似于STL的map、set、multimap和multiset模板,C++ B-tree也提供了btreemap、btreeset、btreemultimap和btreemu...

匿名
2013/02/05
3.4K
1
Javascript图元绘制库--ternlight

基于HTML CANVAS API的Javascript库,提供在HTML页面上绘制图元——如流程图的能力。 目前已支持简单的矩形图元和图元间的连线(直线、直角连线两种),拖拽图元等能力。 该javascript librar...

fancimage1
2013/02/07
6.3K
1
JavaScript 服务器页--JSSP

JSSP (JavaScript Server Pages) 可以让你在 Java 的应用服务器上使用 JavaScript 生成网页。支持已有的 Java 包和嵌入式 SQL 命令。包含 Dervish 这个 JavaScript 交互操作包用于简化 Ajax...

匿名
2013/02/11
3.8K
0

没有更多内容

加载失败,请刷新页面

加载更多

OSPF综合实验

OSPF开放路径最短选择优先协议(IGP协议、链路状态协议) 支持大型网络,通过彼此交互hello建立邻居关系,在通过彼此交互的LSA通过SPF算法算出最优路由的到自己去往其他节点路径。 OSPF的DR、...

osc_qmxpov5s
6分钟前
0
0
vmlogin多平台·多账号·安全提速系统·稳定浏览器指纹环境

VMLogin-稳定浏览器指纹环境,Cookie隔离,稳定,更高效,更智能的多账号管,从超级浏览器开始,让你的跨境之旅更便捷! VMLogin生成多个唯一指纹浏览器,每个指纹浏览器都是相互隔离的。 可以...

VMlogin中文版防关联浏览器
6分钟前
0
0
Buurst SoftNAS操作手册—Part1 如何在AWS上部署SoftNAS

前言 Buurst SoftNAS为企业提供高性能、易管理、高可用、极具经济效益的存储服务,无论是在私有云还是公有云环境下均可实现一键部署。Buurst SoftNAS可为企业提供软件定义NAS文件管理器并提供...

osc_cyo5y1ey
7分钟前
0
0
《闲扯Redis十》Redis 跳跃表的结构实现

一、前言 Redis 提供了5种数据类型:String(字符串)、Hash(哈希)、List(列表)、Set(集合)、Zset(有序集合),理解每种数据类型的特点对于redis的开发和运维非常重要。 原文解析:h...

大道七哥
8分钟前
0
0
BGP综合实验

BGP边界网关协议 BGP是目前使用的唯一的自治系统间的路由协议,它是一种矢量路由协议,基于TCP的179号端口,它采用单播增量更新的方式更新路由,与其他的路由协议不同的是,BGP只要TCP可达,...

osc_tybx1rlt
8分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部