codecamp

双向链表的反转

var Node = function(data, prev) {
  this.data = data;
  this.prev = prev;
  this.next = null;
};
var DoublyLinkedList = function() {
  this.head = null;
  this.tail = null;
  // change code below this line
  this.add = function(data){
      var node, lastNode;
      if(this.head === null){
          
          node = new Node(data, null);
          this.head = node;
          this.tail = node;
      }else{

          lastNode = this.tail;
          
          node = new Node(data, lastNode);
          lastNode.next = node;
          
          this.tail = node;
      }
      
  }
  
  
  this.printReverse = function(){
      var currentNode = null, arr = [];
      currentNode = this.tail;
      while(currentNode.prev){
          arr.push(currentNode.data);
          currentNode = currentNode.prev;
      }
      arr.push(currentNode.data);
      return arr;
      
  }
  
  this.print = function(){
      var currentNode = null, arr = [];
      currentNode = this.head;
      while(currentNode.next){
          arr.push(currentNode.data);
          currentNode = currentNode.next;
      }
      arr.push(currentNode.data);
      return arr;
      
  }


  this.remove = function(data){
     
    if(this.head == null && this.tail == null){
        return null;
    }
    var currentNode = this.head;
    var prevNode = null, nextNode = null;
    
    while(currentNode){
        
        prevNode = currentNode.prev;
        nextNode = currentNode.next;
        
        
        if(currentNode.data == data){

            if(prevNode != null){
                prevNode.next = nextNode;
                
            }else{

                this.head = nextNode;
            }
            
            if(nextNode != null){
                nextNode.prev = prevNode;
            }else{
                this.tail = prevNode;
            }

            break;
            
        }
        currentNode = currentNode.next;
    }

    
  };
  
  this.reverse = function(){
      
    if(this.head == null && this.tail == null){
        return null;
    }
    var currentNode = this.head, nextNode;
    while(currentNode){
        nextNode = currentNode.next;
        currentNode.next = currentNode.prev;
        currentNode.prev = nextNode;
        currentNode = nextNode;
    }
    var tmp = this.head;
    this.head = this.tail;
    this.tail = tmp;
  }
  // change code above this line
};


创建双向链表
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }