zoukankan      html  css  js  c++  java
  • js实现双向链表, 双向链表需要增加一个previous属性

    双向链表,
    双向链表需要增加一个previous属性
    /*双向链表
    * */
    function Node(element) {
        this.element = element;
        this.next = null;
        this.previous = null;//双向链表在这里需要增加一个previous属性
    }
    
    function LList() {
        this.head = new Node("head");
        this.find = find;
        this.insert = insert;
        this.display = display;
        this.remove = remove;
        this.findLast = findLast;
        this.dispReverse = dispReverse;//将链表反转
    }
    
    function dispReverse() {
        var currNode = this.head;
        currNode = this.findLast();
        var nodestr = "";
        while (!(currNode.previous == null)) {
            nodestr += " "+currNode.element;
            currNode = currNode.previous;
        }
        console.log("将链表反转后: "+nodestr);
    }
    
    function findLast() {
        var currNode = this.head;
        while (!(currNode.next == null)) {
            currNode = currNode.next;
        }
        return currNode;
    }
    
    function remove(item) {
        var currNode = this.find(item);
        if (!(currNode.next == null)) {
            currNode.previous.next = currNode.next;
            currNode.next.previous = currNode.previous;
            currNode.next = null;
            currNode.previous = null;
        }
    }
    
    // findPrevious is no longer needed
    /*function findPrevious(item) {
     var currNode = this.head;
     while (!(currNode.next == null) &&
     (currNode.next.element != item)) {
     currNode = currNode.next;
     }
     return currNode;
     }*/
    
    function display() {
        var currNode = this.head;
        var nodestr = "";
        while (!(currNode.next == null)) {
            nodestr += " "+currNode.next.element;
            currNode = currNode.next;
        }
        console.log(nodestr);
    }
    
    function find(item) {
        var currNode = this.head;
        while (currNode.element != item) {
            currNode = currNode.next;
        }
        return currNode;
    }
    
    function insert(newElement, item) {
        var newNode = new Node(newElement);
        var current = this.find(item);
        newNode.next = current.next;
        newNode.previous = current;//双向链表在这里需要设置新节点previous属性
        current.next = newNode;
    }
    
    
    var cities = new LList();
    cities.insert("Conway", "head");
    cities.insert("Russellville", "Conway");
    cities.insert("Carlisle", "Russellville");
    cities.insert("Alma", "Carlisle");
    cities.display();//Conway Russellville Carlisle Alma
    cities.remove("Carlisle");
    cities.display();//Conway Russellville Alma
    cities.dispReverse();// Alma Russellville Conway
  • 相关阅读:
    剑指offer-面试题59_2-队列的最大值-队列
    剑指offer-面试题59_1-滑动窗口的最大值-数组
    剑指offer-面试题64-求1+2+...+n-发散思维
    客车网上售票系统之前台订票、退票、改签管理和前台留言管理
    客车网上售票系统之票务管理
    客车网上售票系统项目之留言管理和新闻管理
    客车网上售票系统之用户管理
    客车网上销售系统需求分析及项目燃尽图
    MyBatis-plus逻辑删除
    项目启动注释模板
  • 原文地址:https://www.cnblogs.com/baiyangyuanzi/p/6689531.html
Copyright © 2011-2022 走看看