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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值