首页 >

javascript中有链表吗

web前端|前端问答javascript中有链表吗
javascript
web前端-前端问答
linux udp 源码,vscode到末尾快捷键,ubuntu优雅上网,tomcat无法使用443,idle爬虫代码,php 数字比较大小,seo学习费一般多少,妹子图网站lzw
javascript中有链表吗
微信淘宝客分销源码,vscode如何终止输入,pxe启动ubuntu,tomcat 最新 版本,ns与sqlite的区别,八爪鱼爬虫工具如何使用,二叉树遍历 php,潍坊seo外包排行,dede游戏网站源码,制作手机网页,acg wordpress模板lzw
javascript中没有链表
exe加密源码,ubuntu配置成kali,tomcat猫砂盆好用,李岳阳爬虫,php去掉重复数组,美工seolzw
什么是链表?

javascript中有链表吗

链表是多个元素组成的列表

元素存储不连续,用next指针连接到一起

JS中没有链表,但是可以用Object模拟链表

常用操作

新增节点 append

删除节点 remove

插入节点 insert

获取索引 indexOf

链表转字符串 toString

获取链表长度 size

判断链表是否为空 isEmpty

数组 VS 链表

数组: 增删非首尾元素时往往需要移动元素

链表:增删非首尾元素,不许要移动元素,只需要更改next的指向即可。

示例如下:

JavaScript没有直接的链表实现,以下是自己对链表的简单实现

function LinkedList(){    var Node = function(element){        this.element = element;        this.next = null;    }    var head = null;    var length = 0;    // 定义append方法    this.append = function(element){        var node = new Node(element),        current;        // 当head为空时,就将新增的node作为head        if(head === null){            head = node        }else{            // 当head不为空时,将head赋值为当前值,通过判断当前值的next值是否存在遍历整个链表            current = head;            while(current.next){current = current.next;            }            // 遍历到链表的最后一项时,设置最后一项的next为新增的内容            current.next = node        }        // 每新增一项,length都加1操作        length++;    }    // 定义toString方法    this.toString = function(){        var string = '',        current = head;        // 最初将当前值定位到头部,当current存在时,将current的值添加到需要返回的string中,之后将current取为链表下一个值        while(current){            string += current.element + ( current.next ? ',' : '');            current = current.next        }        // 遍历完整个链表之后返回string        return string;    }    this.removeAt = function(position){        // 当指定的位置没有在链表的长度范围内时直接返回null        if(position > -1 && position < length){            var current = head,            index = 0,            previous;            // 指定为值是第一个时就将head移到下一个位置            if(position === 0){head = current.next            }else{// 通过遍历的方式将current移动到指定位置,使用index记录移动的距离while(index  -1 && position <= length){            var current = head,            index = 0,            node = new Node(element),            previous;            // 插入内容在头部时将插入的node的next指定为current,current此时为head,然后将head指定为插入的node            if(position === 0){node.next = current;head = node;            }else{// 通过遍历的方式将指针指定到插入的位置,index记录当前移动的位置while(index < position){    previous = current;    current = current.next    index++}// 插入元素通过将插入位置的上一个元素的next指向插入的节点,并将插入的节点的next指向当前节点previous.next = node;node.next = current;            }            // 插入成功之后length加1            length++;            return true;        }        return false    }    // 实现查找指定element的index的功能    this.indexOf = function(element){        var index = 0,        current = head;        // 通过遍历的方式寻找指定元素所在的位置.        // 当前节点存在时,判断当前节点的element是否为需要寻找的element,如果是就返回此时的index,如果不是就继续向下遍历节点        // 当存在两个相同内容时只会返回第一个index        while(current){            if(current.element === element){return index;            }            current = current.next;            index++;        }        return -1;    }}

实现之后进行如下调用:

var linkedList = new LinkedList();linkedList.append(15);linkedList.append(10);linkedList.insert(1,2) // truelinkedList.insert(2,2) // truelinkedList.toString() // "15,2,2,10"linkedList.removeAt(3) // 10linkedList.toString() // "15,2,2"linkedList.indexOf(2) // 1

  • 暂无相关文章
  • Posted in 未分类