type Node = { value: T, next: Node }; export default class Queue { private top: Node = null; private rear: Node = null; public length: number = 0; public push(value: T): void { const node: Node = { value, next: null }; if (this.top === null) { this.top = node; this.rear = node; } else { this.rear.next = node; this.rear = node; } this.length++; } public pop(): void { this.top = this.top.next; if (this.top == null) this.rear = null; this.length--; } public toArray(): T[] { const arr: T[] = Array(this.length); for (let node = this.top, i = 0; node !== null; node = node.next, i++) { arr[i] = node.value; } return arr; } }