`

数据结构与算法-循环链表(js实现)

阅读更多

循环链表和单向链表很相似,唯一的区别是,循环链表的尾节点是指向头节点的,例如下面这样的结构

可以将其理解为一个环形结构,没有头没有尾,很适合做一些无限循环的东西,比如轮播图

循环链表的代码实现

我们只需要在单向链表的基础上稍加改造即可完成循环链表的实现(点击进入单向链表的实现详解)

 

    /************节点*************/
    function Node(element) {
        this.element = element;//当前节点的数据
        this.next = null;//下一个节点数据
    }

    /*************************链表*****************************/
    function LList() {
        this.head = new Node("head");//头节点
        this.head.next=this.head;//注意这里
    }
    LList.prototype={
        //查找某一节点
        find:function (item) {
            var currNode = this.head;
            while (currNode.element != item) {
                currNode = currNode.next;
                if (currNode==this.head)return null;
            }
            return currNode;
        },
        //查找尾节点
        findLast:function(){
            var currNode = this.head;
            while (!(currNode.next == this.head)) {
                currNode = currNode.next;
            }
            return currNode;
        },
        //向某一元素后面插入新节点
        insert:function(newElement,item){
            var newNode = new Node(newElement);
            var current = this.find(item)||this.findLast();//默认插入到尾部
            newNode.next = current.next;
            current.next = newNode;
        },
        //查找某一节点的前一个节点(前驱)
        findPrevious:function(item){
            var currNode = this.head;
            while (!(currNode.next == this.head) &&(currNode.next.element != item)) {
                currNode = currNode.next;
            }
            return currNode;
        },
        //删除某一个节点
        remove:function(item){
            var prevNode = this.findPrevious(item);
            if (!(prevNode.next == this.head)) {//不能删除头
                prevNode.next = prevNode.next.next;
            }
        },
        //修改某一节点的数据
        edit:function(item,newItem){
            var element=this.find(item);
            element.element=newItem;
        },
        //在控制台打印出所有节点(为了方便预览)
        display:function(){
            var currNode = this.head;
            while (!(currNode.next == this.head)) {
                console.log(currNode.next.element);
                currNode = currNode.next;
            }
        }
    }
测试
   插入四个节点

 

var lkk=new LList;
lkk.insert("likek");
lkk.insert("zhangsan");
lkk.insert("lisi","zhangsan");//指定插入位置
lkk.insert("haha");
  查看当前所有节点的情况
lkk.display();
/*likek
zhangsan
lisi
haha*/
 删除节点
lkk.remove("zhangsan");
lkk.display();
/*likek
lisi
haha*/
  • 大小: 22.9 KB
  • 大小: 21.1 KB
分享到:
评论

相关推荐

    JavaScript版 数据结构与算法

    原理讲解 8-2 循环队列-代码实操 8-3 任务队列-原理讲解 8-4 任务队列-代码实操 第9章 数据结构之“链表”链表是一个有序的线性数据结构,对于它而言排序和循环是最基本的两项技能,这个章节从零是实现链表结构到...

    JS中的算法与数据结构之链表(Linked-list)实例详解

    本文实例讲述了JS中的算法与数据结构之链表(Linked-list)。分享给大家供大家参考,具体如下: 链表(Linked-list) 前面我们讨论了如何使用栈、队列进行存数数据,他们其实都是列表的一种,底层存储的数据的数据结构都...

    gn算法matlab代码-js-data-structures:JavaScript的数据结构

    :JavaScript的循环链表数据结构 :blossom: :JavaScript的先进先出数据结构 堆栈 :soft_ice_cream: :JavaScript的后进先出数据结构 :person_juggling: 保持优先 :fallen_leaf: 堆 :JavaScript的堆数据结构 :...

    leetcode给单链表加一js实现-javascript-algorithms:JavaScript实现的一些数据结构和Javascript

    给单链表加一js实现JavaScript 算法和数据结构 排序算法 一些排序算法,它们是在 javascript 中实现的。 冒泡排序 堆排序 插入排序 归并排序 快速排序 选择排序 壳排序 力码 leetcode 问题的一些解决方案。 数据结构...

    data-structure-js:《数据结构与算法JavaScript描述》看书敲代码

    数据结构与算法JavaScript描述 数组 列表 栈 队列 方块舞舞伴分配问题 基数排序 优先队列 链表 链表的实现 双向链表 循环链表 循环链表应用:约瑟夫环 字典 字典的实现 单词出现次数统计 散列表 散列的实现 散列表...

    leetcode分类-js-algorithm-note:JavaScript数据结构与算法学习笔记

    数据结构与算法学习 时间复杂度和空间复杂度 时间复杂度 算法的时间复杂度表示程序运行所需要的时间,它定性的描述程序运行的时间,用大 O 表示,常见的时间复杂度为 O(1)、O(n)、O(logN)、O(n2)、没有循环的时间...

    Data-Structures-and-Algorithms-in-[removed]用JavaScript实现的数据结构和算法

    JavaScript中的数据结构和算法可视化数据结构和算法 数据结构大批哈希表链表单链表双链表堆使用链表使用数组队列使用链表使用堆栈二进制搜索树(BST) 演算法数组中的TwoPairsSum 反转字符串第一个重复出现的字符...

    数据结构和算法:Javascript 401数据结构和算法

    Javascript 401数据结构和算法 目录 数据结构 挑战总结 实例化链接列表。 挑战说明 使用带有将值追加到链表末尾的append方法创建和实例化具有值的链表。 insert方法在链表的开头插入一个值,包括遍历链表并搜索给定...

    leetcode算法分组-javascript_algorithms:各种算法在Javascript中的实现

    概念和数据结构,我也花时间在这里学习 Regex 等。 迄今为止完成的挑战: 单词缩写 - 文本操作测试(来自 CodeWars ) Square Into Squares - 一个棘手的数学问题,我使用递归解决了(来自 CodeWars ) FizzBu​​zz...

    StructuresandAlgorithms-Code:重温数据结构与算法,代码实践

    循环链表...实现 经典题 判断链表是否有环 反转链表 两个有序链表合并 求链表中间节点 删除倒数第n个节点 两个单链表的公共节点 leetcode建议练习题号: 业界应用 如何实现LRU缓存淘汰算法 stack & queue 栈、队列 ...

    leetcode会员怎么买便宜-leetcode:javascript数据结构和算法

    对于前端工程师来说,最常用的是html、css、js,数据结构和算法薄弱 前端开发门槛低、人员参差不齐 前端开发只会写页面,不懂算法,伪程序员 面试考算法,通过率极低 看过c、c++、java版算法,javascript不会写 怎么...

    algorithm-[removed]用 JavaScript 实现的算法和数据结构。Algorithms and data structures implemented in JavaScript

    数据结构的源码实现以及本地调试使用的数据模拟,以便更好的理解数据结构与算法。随笔记录学算法还有其他知识作为基础,其对应的目录下是学习资料以及总结。LeetCode 目录是刷题的记录,如果对应的题目下有同名的 MD...

    面试食谱:学习数据结构,算法和面向对象概念的游乐场

    该存储库将包含几个代码段以及有关数据结构,算法和面向对象概念的有用资源。 Feel free to contribute to this repository and make a pull request! C Java 递归 矩阵 数组 链表 循环链表 双链表 排序算法 搜索...

    algorithm:js数据结构和算法

    algorithm js数据结构和算法 twoWay.js 双向循环链表,将进入的数据构建成一个圆环,每个节点双向引用。

    computer_science:大多数公共数据结构和算法的实现

    计算机科学数据结构和算法 首先,我将使用 javascript 实现所有内容:nodejs、gulp、mocha 和其他 javascript 工具。 也许以后,我也可以用 C++、php、python 等其他语言来实现。 实施的: 堆 队列 二叉树 计划: ...

    Java单链表源码分析-ds-algos:ds-算法

    各种算法和数据结构的实现已经通过动画幻灯片进行了演示和实现。 它涵盖了许多关于算法和数据结构的面试室问题。 问题和解决方案由- 动画幻灯片。 (为了使算法可视化更快) IDE 上的编码算法。 该课程涵盖以下主题 ...

    algoacademy:React App用于查看数据结构和算法

    每种语言都有针对以下内容的教程和代码段: 原始数据类型复杂的数据类型基本循环和内建函数常见的数据结构,例如堆栈,队列,链表高级数据结构,例如优先级队列,尝试和图形还有一个测验部分,任何人都可以在编程...

    leetcode湖泊问题-Algorithms-in-[removed]JavaScript中的算法

    中实现的算法、数据结构和编码挑战。 这个存储库是我在一段时间内实施的算法、数据结构和编码挑战的集合。 考虑到有效的时间和空间复杂度方法,尝试实现算法/解决方案。 这些解决方案经过充分测试,除非另有说明,...

    javascript-datastructures-算法

    学习JavaScript数据结构和算法基础( )栈(堆栈)类别(队列)链表(LinkedList)单链表(LinkedList)双链表(DoublyLinkedList)循环链表(CircularLinkedList)判断链表是否成环(LinkedListWithCycle)链表插入...

    leetcode湖泊问题-Algorithms-in-Java:Java中的算法

    实现的算法、数据结构和编码挑战。 这个存储库是我在一段时间内实施的算法、数据结构和编码挑战的集合。 考虑到有效的时间和空间复杂度方法,尝试实现算法/解决方案。 这些解决方案经过充分测试,除非另有说明,否则...

Global site tag (gtag.js) - Google Analytics