#Data Structure - Doubly Linked List @(Data Structure & Algorithm)
function Node(el){
this.el = el;
this.prev = null;
this.next = null;
}
function DLList(){
this.head = new Node("head");
}
DLList.prototype = {
constructor: DLList,
insert: function(el,prev){
var node = new Node(el);
var prevNode = this.find(prev);
if (prevNode){
//修改四个指针
if (prevNode.next){
prevNode.next.prev = node;
}
node.next = prevNode.next;
node.prev = prevNode;
prevNode.next = node;
return true;
} else
return false;
},
remove: function(el){
var node = this.find(el);
if (node){
//修改四个指针
if (node.next){
node.next.prev = node.prev;
}
node.prev.next = node.next;
node.next = null;
node.prev = null;
return true;
} else
return false;
},
find: function(el){
var node = this.head;
while (node.el !== el){
if (node.next === null)
return false;
node = node.next;
}
return node;
},
findLast: function(){
var node = this.head;
while (node.next !== null){
node = node.next;
}
return node.el;
},
display: function(){
var node = this.head;
do {
node = node.next;
console.log("el" + node.el);
} while (node.next !== null);
},
advance: function(el,n){
var node = this.find(el);
var i = 0;
while (node.next !== null && i < n){
node = node.next;
i ++;
}
//使用while 要注意i++的位置,这里i最后等于n
if (i === n){
return node;
} else
return false;
},
back: function(el,n){
var node = this.find(el);
var i = 0;
while (node.prev !== null && i < n){
node = node.prev;
i ++;
}
if (i === n){
return node;
} else
return false;
}
};
var arr = [1,2,3,4,5,6,7];
var l = new DLList();
var prev = l.head.el;
for (var i = 0; i < arr.length; i++){
l.insert(arr[i],prev);
prev = arr[i];
}