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
  • 相关阅读:
    纯虚函数和抽象类
    继承和多态
    C++运算符重载
    构造函数
    C++对c中函数的拓展,函数重载
    c++ c的拓展
    linux终端下常用快捷键
    SEED-DVS6467_SDK的交叉编译环境搭建问题
    Linux内核编译
    Python简单爬虫记录
  • 原文地址:https://www.cnblogs.com/baiyangyuanzi/p/6689531.html
Copyright © 2011-2022 走看看