zoukankan      html  css  js  c++  java
  • js封装一个单链表

    // 封装链表
    function LinkedList(){
        // 创建一个內部类,用于存节点的数据和指针
        function Node(data){
            this.data = data;
            this.next = null;
        }
        // 链表头
        this.head = null;
        // 链表长度
        this.length = 0;
        // ---------------------方法------------------
    
        // append 向链表结尾追加一个节点
        LinkedList.prototype.append = function(data){
            var newNode = new Node(data);
            if(!this.length){
                this.head = newNode;
            }else{
                var current = this.head;
                while(current.next){
                    current = current.next
                }
                current.next = newNode
            }
            this.length += 1
        }
        // toString
        LinkedList.prototype.toString = function(){
            var current = this.head;
            var str = '';
            while(current){
                str += current.data + ' ';
                current = current.next; 
            }
            return str
        }
        // insert  向链表中插入一个节点
        LinkedList.prototype.insert = function(position,data){
            // 位置越界处理
            if(position < 0 || position > this.length) return false;
            // 创建新节点
            var newNode = new Node(data);
            // 插入头部
            if(position == 0){
                newNode.next = this.head;
                this.head = newNode;
                return true
            }
            // 插入其它位置
            let index = 0;
            let current = this.head;
            let previous = null;
            while(index++ < position){
                previous = current;
                current = previous.next; 
            }
            previous.next = newNode;
            newNode.next = current;
            this.length++;
            return true
    
    
        }
        // get    获取某个节点的信息
        LinkedList.prototype.get = function(position){
            // 越界处理
            if(position < 0 || position >= this.length) return null;
            // 获取
            let index = 0;
            let current = this.head;
            while(index++ < position){
                current = current.next;
            }
            return current.data 
        }
        // indexOf   通过元素返回对应的索引,没有的话返回-1
        LinkedList.prototype.indexOf = function(data){
            if(!this.length) return -1;
            let index = 0;
            let current = this.head;
            while(current){
                if(current.data === data){
                    return index
                }
                current = current.next;
                index++;
            }
            return -1
        }
        // update   修改某个节点的信息
        LinkedList.prototype.update = function(position,newData){
            // 位置越界处理
            if(position < 0 || position >= this.length) return false;
            // 修改头部节点
            if(position == 0){
                this.head.data = newData;
                return true
            }
            // 修改其它节点
            let current = this.head;
            let index = 0;
            while(index++ < position){
                current = current.next
            }
            current.data = newData;
            return true
    
        }
        // removeAt   通过索引删除相应的节点
        LinkedList.prototype.removeAt = function(position){
            // 位置越界处理
            if(position < 0 || position >= this.length) return null;
            let current = this.head;
            // 删除头部节点
            if(position == 0){
                this.head = this.head.next;
                return current.data
            }
            // 删除其它节点
            let previous = null;
            let index = 0;
            while(index++ < position){
                previous = current;
                current = previous.next;
            }
            previous.next = current.next;
            this.length--;
            return current.data
        }
        // remove   通过元素删除相应的节点
        LinkedList.prototype.remove = function(data){
            // 头部节点删除
            if(this.head.data === data){
                this.head = this.head.next;
                return true
            }
            // 删除其它节点
            let current = this.head;
            let previous = null;
            while(current){
                previous = current;
                current = previous.next;
                if(current && current.data === data){
                    previous.next = current.next;
                    this.length--;
                    return true
                }
            }
            return false
        }
        // isEmpty  判断链表是否为空
        LinkedList.prototype.isEmpty = function(){
            return this.length == 0
        }
        // size     查看链表的长度
        LinkedList.prototype.size = function(){
            return this.length
        }
    }
    // 测试
    let list = new LinkedList();
    list.append('caoCao')
    list.append('liuBei')
    list.append('zhangFei')
    console.log(list);
    console.log(list.toString());
    list.insert(2,'hei')
    console.log(list);
    console.log(list.toString());
    console.log(list.get(2));
    console.log(list.indexOf('hei'));
    console.log(list.update(3,'美女'));
    console.log(list.toString());
    console.log(list.removeAt(2));
    console.log(list.toString());
    console.log(list.remove('美女'));
    console.log(list.toString());
    console.log(list.isEmpty());
    console.log(list.size());
  • 相关阅读:
    不安装oracle客户端也可以使用pl/sql developer
    C语言I博客作业08
    C语言I博客作业07
    C语言I博客作业06
    C语言I博客作业05
    c语言第一次作业1
    C语言I博客作业04
    C语言I博客作业03
    C语言I博客作业02,
    ASP.NET url重写与图片防盗链 I
  • 原文地址:https://www.cnblogs.com/cyf666cool/p/14837182.html
Copyright © 2011-2022 走看看