1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- 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;
|