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
    }
}

 

posted @ 2016-11-20 18:47  scoop_zm  阅读(281)  评论(0编辑  收藏  举报