双向链表的反转
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
};