用js实现链表

链表骨架

function LinkedList(){

      var Node = function(element){
          this.element = element;
          this.next = null;
       }
      var length = 0;
      var head = null;
      var    tail = null;

      this.insert = function(position,element){}

      this.removeAt = function(position){}

      this.remove = function(element){}

      this.toString = function(){}

      this.isEmpty = function(){}

      this.size = function(){}

}

//实现链表

function LinkedList(){
            var Node = function(element){
                this.element = element;
                this.next = null;
            }
            var length = 0;
            var head = null;
            var    tail = null;

     
            //插入
            this.insert = function(position,element){
                if(position>=0&&position<=length){  //插入位置必须合理
                    var node = new Node(element);
                    var current = head,index = 0;
                    var previous;
                    if(position===0){               //在头部插入
                        node.next = current;
                        head = node;
                        tail = head;                //这是头、尾同一指向
                    }
                    else if(position===length){    //在尾部插入
                        tail.next = node;
                        tail = node;     
                    }
                    else{                           //在中间插入
                        while(index++<position){
                            previous = current;
                            current = current.next;
                        }
                        node.next = current;
                        previous.next = node;
                    }
                    length++;
                    return true;
                }
                else{
                    return false;
                }
            }
            //移除某个位置
            this.removeAt = function(position){
                if(position>=0&&position<=length){  //位置必须合理
                    var current = head,index = 0;
                    var previous;    
                    if(position===0){
                        head = current.next;
                    }       
                    else{
                        while(index++<position){
                            previous = current;
                            current = current.next;
                        }
                        previous.next = current.next;
                        
                    }           
                    length--;
                    return true;
                }
                else{
                    return false;
                }
            }
            //移除某个元素
            this.remove = function(element){
                var position = this.indexOf(element);
                return this.removeAt(position);
            }
            //indexOf方法
            this.indexOf = function(element){
                var current = head;
                var index = 0;
                while(current){
                    if(current.element===element){
                        return index;
                    }
                    else{
                        current=current.next;
                        index++;
                    }
                }
                return -1
            }
            //将链表转化成字符串
            this.toString = function(){              
                var str = "";
                var current = head;
                while(current){
                    str+=current.element+" ";
                    current=current.next;
                }
                return str;
            }
            this.size = function(){
                return length;
            }
            this.isEmpty = function(){
                return length===0;
            }
            this.getHead = function(){
                return head;
            }
        }

  //执行一下


        var list = new LinkedList()
        list.insert(0,0);list.insert(1,1);list.insert(1,2);list.insert(2,2);list.insert(2,3)
        list.toString();                   //0 2 3 2 1
        list.removeAt(1);list.toString();  //0 3 2 1
        list.remove(1); list.toString();   //0 3 2
        list.size();                       //3
        list.isEmpty()                     //false
        list.getHead();/*{element:0,next:{element:3,next:{element:2,next:null}}}*/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值