You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
949 B
68 lines
949 B
class Node { |
|
/// value; |
|
/// next; |
|
|
|
constructor(value) { |
|
this.value = value; |
|
|
|
// TODO: Remove this when targeting Node.js 12. |
|
this.next = undefined; |
|
} |
|
} |
|
|
|
class Queue { |
|
// TODO: Use private class fields when targeting Node.js 12. |
|
// #_head; |
|
// #_tail; |
|
// #_size; |
|
|
|
constructor() { |
|
this.clear(); |
|
} |
|
|
|
enqueue(value) { |
|
const node = new Node(value); |
|
|
|
if (this._head) { |
|
this._tail.next = node; |
|
this._tail = node; |
|
} else { |
|
this._head = node; |
|
this._tail = node; |
|
} |
|
|
|
this._size++; |
|
} |
|
|
|
dequeue() { |
|
const current = this._head; |
|
if (!current) { |
|
return; |
|
} |
|
|
|
this._head = this._head.next; |
|
this._size--; |
|
return current.value; |
|
} |
|
|
|
clear() { |
|
this._head = undefined; |
|
this._tail = undefined; |
|
this._size = 0; |
|
} |
|
|
|
get size() { |
|
return this._size; |
|
} |
|
|
|
* [Symbol.iterator]() { |
|
let current = this._head; |
|
|
|
while (current) { |
|
yield current.value; |
|
current = current.next; |
|
} |
|
} |
|
} |
|
|
|
module.exports = Queue;
|
|
|