classDoubleLinkedList{constructor(data){this.header =null;this.data = data;this.next =null;this.prev=null;this.tail=nullthis.length =0;}// 尾部插入append(element){let newNode =newDoubleLinkedList(element);if(this.length ==0){this.header = newNode;this.tail=newNode
}else{let current =this.header;while(current.next){
current = current.next;}
current.next = newNode;
newNode.prev=current
this.tail=newNode
}this.length =this.length +1;}toString(){let current =this.header;let str ="";while(current){
str += current.data +" ";
current = current.next;}return str;}// 插入insert(position, element){if(position <0|| position >=this.length){returnfalse;}let newNode =newDoubleLinkedList(element);if(position ==0){let oldNode =this.header;this.header = newNode;
newNode.next = oldNode;}else{let current =this.header;for(let i =0; i < position; i++){
current = current.next;}let prv =this.header;for(let i =0; i < position -1; i++){
prv = prv.next;}
prv.next = newNode;
newNode.next = current;}this.length =this.length +1;}removeAt(position){if(position <0|| position >=this.length){returnfalse;}if(position ==0){this.header =this.header.next;}if(position >0&& position <=this.length -1){let current =this.header;for(let i =0; i < position; i++){
current = current.next;}let prv =this.header;for(let i =0; i < position -1; i++){
prv = prv.next;}if(current.next){
prv.next = current.next;}else{
prv.next =null;}}this.length =this.length -1;}remove(element){let res =-1;let current =this.header;for(let i =0; i <this.length; i++){if(current.data === element){
res = i;}
current = current.next;}if(res !=-1){this.removeAt(res);}}upDate(position, element){if(position <0|| position >=this.length){returnnull;}let current =this.header;for(let i =0; i < position; i++){
current = current.next;}
current.data = element;}get(position){if(position <0|| position >=this.length){returnnull;}let current =this.header;for(let i =0; i < position; i++){
current = current.next;}return current.data;}indexOf(element){let current =this.header;let res =-1;for(let i =0; i <this.length; i++){if(current.data === element){
res = i;break;}
current = current.next;}return res;}forward(){if(!this.tail){returnfalse}let startNode=this.header
let arr=[]while(startNode.next){
arr.push(startNode.data)
startNode=startNode.next
}
arr.push(startNode.data)return arr
}backword(){if(!this.tail){returnfalse}let endNode=this.tail
let arr=[]while(endNode.prev){
arr.push(endNode.data)
endNode=endNode.prev
}
arr.push(endNode.data)return arr
}}