zoukankan      html  css  js  c++  java
  • javascript算法-单链表

    链表相比数组更具灵活性和扩展性。主要有节点数据以及指向节点的指针所构成。

    链表中节点的实现【元素和指针】:

            let Node = function( element ){
                this.element = element;
                this.next = null;
            };

    单链表的实现:

    function LinkedList(){
            let Node = function( element ){
                this.element = element;
                this.next = null;
            };
    
            let head = null;
            let length = 0;
    
            this.append = function( element ){
                let newNode = new Node( element );
                let current = null;
                if( head == null ){
                    head = newNode;
                }else{
                    current = head;
                    while( current.next ) {
                        current = current.next;
                    }
                    current.next = newNode;
                }
                length++;
            };
    
            this.size = function(){
                return length;
            };
    
            this.removeAt = function( pos ){
                if( pos > -1 && pos < length ){
                    var current = head,
                        index = 0,
                        prev = null;
    
                    if( pos == 0 ){
                        head = current.next;
                    }else{
                        while( index++ < pos ){
                            prev = current;
                            current = current.next;    
                        }
                        prev.next = current.next;    
                        length--;
                        return current.element;
                    }
                }else{
                    return null;
                }
            };
    
            this.print = function(){
                let current = head;
                while( current ){
                    console.log( current.element );
                    current = current.next;
                }
            };
    
            this.insert = function( pos, element ){
                let newNode = new Node( element );
                let current, prev, index = 0;
                current = head;
                if( pos >= 0 && pos <= length ){
                    if( pos == 0 ){
                        newNode.next = head;
                        head = newNode;
                    }else{
                        while( index++ < pos ){
                            prev = current;
                            current = current.next;    
                        }
                        newNode.next = current;    
                        prev.next = newNode;
                    }
                    length++;
                    return true;
                }else {
                    return false;
                }
            };
            this.toString = function(){
                let current = head, string = '';
                while( current ){
                    string += current.element + ',';
                    current = current.next;
                }
                return string.substring( 0, string.length - 1 );
            };
            this.indexOf = function( element ){
                let current = head, index = -1;
                while( current ){
                    index++;
                    if( current.element == element ){
                        return index;
                    }
                    current = current.next;
                }
                return -1;
            };
            this.remove = function( element ){
                let pos = this.indexOf( element );
                return this.removeAt( pos );
            };
            this.isEmpty = function(){
                return length == 0;
            };
            this.getHead = function(){
                return head;
            }
        }    
    
    
        var oLink = new LinkedList();
        oLink.append( "java" );
        oLink.append( "php" );
        oLink.append( "javascript" );
        oLink.append( "python" );
    
        oLink.print();
        console.log( "-----------------------节点个数------------------------")
        console.log( oLink.size() );
    
        console.log( "-----------------------删除第2个元素之前------------------------")
        console.log( oLink.removeAt( 2 ) );
        console.log( "-----------------------删除第2个元素之后------------------------")
        oLink.print();
        console.log( "节点个数");
        console.log( oLink.size() );
        console.log( "-----------------------插入节点前------------------------")
        oLink.insert( 0, "c语言" );
        oLink.insert( 3, "c++语言" );
        console.log( "-----------------------插入节点后------------------------")
        oLink.print();
        oLink.insert( 4, "erlang语言" );
        console.log( "-----------------------插入节点后------------------------")
        oLink.print();
        console.log( "-----------------------节点个数------------------------")
        console.log( oLink.size() );
    
        console.log( "-----------------------toString------------------------")
        console.log( oLink.toString() );
        console.log( "------------------------indexOf-----------------------" );
        console.log( oLink.indexOf( "c语言2" ) );
        console.log( "------------------------clear-----------------------" );
        oLink.print();
  • 相关阅读:
    BZOJ 1192 鬼谷子的钱袋
    浅谈双连通分量、强连通分量
    BZOJ 1047 理想的正方形
    浅谈单调队列、单调栈
    django ORM之manytomany跨表
    django DateTimeField和DateField和TimeField
    django 一对多的添加记录create 和save 方法,update 更新和save()方法的区别,查询API的方法
    Python生成随机验证码
    obj.t2c.all-------django自动生成第三张多对多关系表中另一张表信息在前端的显示
    Form组件验证之ajax提交数据并显示错误信息
  • 原文地址:https://www.cnblogs.com/ghostwu/p/9279671.html
Copyright © 2011-2022 走看看