/*
基于链表的 - 队列
尾部插入和头部删除
先进先出
*/
class LinkListQueue{
constructor() {
this.length = 0;
this.head = null;
this.tail = null;
}
// 入队
enqueue(value){
if(!this.tail) {
this.head = this.tail = {value, next: null, prev: null};
} else {
this.tail.next = {value, next: null, prev: this.tail};
this.tail = this.tail.next
}
this.length++;
}
// 出队
dequeue() {
let value;
if(!this.head) return undefined;
else{
const value = this.head.value;
if(!this.head.next){
// 只剩最后一个了
this.head = this.tail = null;
} else {
this.head.next.prev = null;
this.head = this.head.next;
}
this.length--;
return value;
}
}
}
const list = new LinkListQueue();
list.enqueue(1);
list.enqueue(2);
list.enqueue(3);
list.enqueue(4);
console.log(list.dequeue());
console.log(list);
算法总结: