JavaScript数据结构与算法学习笔记之单链表

下面是一个链表


一、用Javascript实现一个链表及基本功能

/**
*单链表的实现
**/
function LinkedList() {
    //定义一个节点
    var Node = function (element) {
        this.element = element;
        this.next = null;
    }
    
    var length = 0; // {2}
    var head = null; // {3}
    //节点追加
    this.append =  function(element){
        var node = new Node(element),
        current;
        if(head==null){
            head = node;
        } else{
            current = head;
            //循环列表,直到找到最后一项
            while(current.next){
                current = current.next;
            }
            //找到最后一项,将其next赋为node,建立链接
            current.next = node;
            
        }
        length++;//更新列表的长度
    }

    //删除节点
    this.removeAt = function(position){
        //检查越界值
        if(position > -1 && position <length){
            var current = head,
            previous,
            index = 0;
            //移除第一项
            if(position === 0){
                head = current.next;
            } else{
                while(index++ < position){
                    previous = current;
                    current = current.next;
                }
                //将previous与current的下一项链接起来:跳过current,从而移除它
                previous.next = current.next;
            }
            length--;
            return current.element;
        }else{
            return null;
        }
    };
    
    //指定位置插入一个节点
    this.insert = function (position,element) {
        if(position >= 0 && position <= length ){
            var node = new Node(element),
            current = head,
            previous,
            index = 0;
       
            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.toString = function () {
        var current = head,
        string = '';
        while(current){
            string = current.element;
            current = current.next;
        }
        return string;
    }

    
    this.indexOf = function (element) {
        var current = head,
        index = -1;
        while(current){
            if(element === current.element){
                return index;
            }
            index++;
            current = current.next;
        }
        return -1;
    }


    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.getHead = function() {
        return head
    }
}
发布了72 篇原创文章 · 获赞 6 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/hongyu799/article/details/104118833