const { LinkedList: SinglyLinkedLists, Node } = require('../LinkedList'); class Queue extends SinglyLinkedLists { constructor() { super(); this.NotAllowed = 'Not Allowed'; } enqueue(data) { return this.addAtEnd(data); } dequeue() { const node = this.removeFromBeginning(); return node ? node.data : node; } peek() { const node = this.getFirst(); return node ? node.data : node; } length() { return this.size; } destroy() { this.delete(); } /** Override and throw error for other LL methods */ addAtBeginning() { throw new Error(this.NotAllowed); } addAt() { throw new Error(this.NotAllowed); } removeFromEnd() { throw new Error(this.NotAllowed); } getLast() { throw new Error(this.NotAllowed); } getAt() { throw new Error(this.NotAllowed); } removeAt() { throw new Error(this.NotAllowed); } } const q = new Queue(); q.enqueue(10); q.enqueue(101); q.enqueue(44); console.log(q.length()); console.log(q.dequeue()); module.exports = Queue;