zoukankan      html  css  js  c++  java
  • javascript数据结构——链表

    最近在看《javascript数据结构和算法》这本书,补一下数据结构和算法部分的知识,觉得自己这块是短板。

    做点小笔记。

    function LinkedList(){
        var Node = function(element){
            this.element = element
            this.next = null
        }
    
        var length = 0
        var head = null
    
        this.append = function(element){
            var node = new Node(element)
            var current
    
            if(head == null){    //链表为空
                head = node
            }else{    //链表不为空
                current = head
    
                //循环链表,直到最后一项
                while(current.next){
                    current = current.next
                }
    
                current.next = node
            }
    
            length ++    //更新链表长度
        }
    
        this.insert = function(position,element){
            var node = new Node(element)
            var current = head
            var previous
            var index = 0
    
            if(position>=1 && position<=length){    //判断是否越界
                
                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
            }
        }
    
        this.indexOf = function(element){
            var current = head
            var index = -1
    
            while(current){
                if (element === current.element) {
                    return index
                }
    
                index++
                current = current.next
            }
    
            return -1
        }
    
        this.removeAt = function(position){
            if(position>-1 && position<length){    //判断是否越界
                var current = head
                var previous
                var index = 0
    
                if(position === 0){    //移除第一个元素
                    head = current.next
                }else{
                    while(index++ < position){
                        previous = current
                        current = current.next
                    }
    
                    previous.next = current.next  //移除元素
                }
    
                length --    //更新长度
    
                return current.element
    
            }else{
                return null
            }
        }
    
        this.remove = function(element){
            var index = this.indexOf(element)
            return this.removeAt(index)
        }
    
        this.isEmpty = function(){
            return length == 0
        }
    
        this.size = function(){
            return length
        }
    
        this.toString = function(){
            var current = head
            var string = ""
    
            while(current){
                string = "," + current.element
                current = current.next
            }
    
            return string.slice(1)
        }
    
        this.getHead = function(){
            return head
        }
    }
  • 相关阅读:
    交通部道路运输车辆卫星定位系统部标JTT808、809、796标准大全
    linux下如何源码编译安装vim
    Ubuntu如何重新启动tftp服务
    Ubuntu如何自定义tftp服务根目录
    git如何撤销git add操作?
    如何使两台主机间的不同网段互通?
    debian下如何源码安装tmux
    mysql插入数据自动生成主键uuid
    mysql的 UUID的生成方式
    MySQL SQL语句 生成32位 UUID
  • 原文地址:https://www.cnblogs.com/minz/p/6083149.html
Copyright © 2011-2022 走看看