Challenge - 5 Problems
Queue Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediateOutput of enqueue and dequeue operations
What is the printed state of the queue after performing these operations?
Enqueue 10, Enqueue 20, Dequeue, Enqueue 30
Enqueue 10, Enqueue 20, Dequeue, Enqueue 30
DSA Typescript
class Node { value: number; next: Node | null; constructor(value: number) { this.value = value; this.next = null; } } class Queue { front: Node | null = null; rear: Node | null = null; enqueue(value: number) { const newNode = new Node(value); if (!this.rear) { this.front = this.rear = newNode; return; } this.rear.next = newNode; this.rear = newNode; } dequeue(): number | null { if (!this.front) return null; const value = this.front.value; this.front = this.front.next; if (!this.front) this.rear = null; return value; } printQueue(): string { let current = this.front; let result = ''; while (current) { result += current.value + ' -> '; current = current.next; } return result + 'null'; } } const q = new Queue(); q.enqueue(10); q.enqueue(20); q.dequeue(); q.enqueue(30); console.log(q.printQueue());
Attempts:
2 left
💡 Hint
Remember that dequeue removes from the front of the queue.
✗ Incorrect
After enqueueing 10 and 20, the queue is 10 -> 20 -> null. Dequeue removes 10, so queue becomes 20 -> null. Enqueue 30 adds it to the rear, so queue is 20 -> 30 -> null.
❓ Predict Output
intermediateResult after multiple dequeues
What is the printed state of the queue after these operations?
Enqueue 5, Enqueue 15, Enqueue 25, Dequeue, Dequeue
Enqueue 5, Enqueue 15, Enqueue 25, Dequeue, Dequeue
DSA Typescript
class Node { value: number; next: Node | null; constructor(value: number) { this.value = value; this.next = null; } } class Queue { front: Node | null = null; rear: Node | null = null; enqueue(value: number) { const newNode = new Node(value); if (!this.rear) { this.front = this.rear = newNode; return; } this.rear.next = newNode; this.rear = newNode; } dequeue(): number | null { if (!this.front) return null; const value = this.front.value; this.front = this.front.next; if (!this.front) this.rear = null; return value; } printQueue(): string { let current = this.front; let result = ''; while (current) { result += current.value + ' -> '; current = current.next; } return result + 'null'; } } const q = new Queue(); q.enqueue(5); q.enqueue(15); q.enqueue(25); q.dequeue(); q.dequeue(); console.log(q.printQueue());
Attempts:
2 left
💡 Hint
Each dequeue removes the front element.
✗ Incorrect
After enqueueing 5, 15, 25, queue is 5 -> 15 -> 25 -> null. First dequeue removes 5, second removes 15, leaving 25 -> null.
🔧 Debug
advancedIdentify the bug in dequeue method
What error will occur when calling dequeue on a queue with one element using this code?
DSA Typescript
class Node { value: number; next: Node | null; constructor(value: number) { this.value = value; this.next = null; } } class Queue { front: Node | null = null; rear: Node | null = null; enqueue(value: number) { const newNode = new Node(value); if (!this.rear) { this.front = this.rear = newNode; return; } this.rear.next = newNode; this.rear = newNode; } dequeue(): number | null { if (!this.front) return null; const value = this.front.value; this.front = this.front.next; // Missing update of rear when queue becomes empty return value; } } const q = new Queue(); q.enqueue(100); q.dequeue(); q.dequeue(); // What happens here?
Attempts:
2 left
💡 Hint
Check what happens when dequeue is called on empty queue.
✗ Incorrect
The dequeue method returns null if front is null, so calling dequeue on empty queue returns null safely. Missing rear update causes logical error but no runtime error here.
❓ Predict Output
advancedQueue state after interleaved operations
What is the printed state of the queue after these operations?
Enqueue 1, Enqueue 2, Dequeue, Enqueue 3, Dequeue, Enqueue 4
Enqueue 1, Enqueue 2, Dequeue, Enqueue 3, Dequeue, Enqueue 4
DSA Typescript
class Node { value: number; next: Node | null; constructor(value: number) { this.value = value; this.next = null; } } class Queue { front: Node | null = null; rear: Node | null = null; enqueue(value: number) { const newNode = new Node(value); if (!this.rear) { this.front = this.rear = newNode; return; } this.rear.next = newNode; this.rear = newNode; } dequeue(): number | null { if (!this.front) return null; const value = this.front.value; this.front = this.front.next; if (!this.front) this.rear = null; return value; } printQueue(): string { let current = this.front; let result = ''; while (current) { result += current.value + ' -> '; current = current.next; } return result + 'null'; } } const q = new Queue(); q.enqueue(1); q.enqueue(2); q.dequeue(); q.enqueue(3); q.dequeue(); q.enqueue(4); console.log(q.printQueue());
Attempts:
2 left
💡 Hint
Track the front element after each dequeue.
✗ Incorrect
Operations: enqueue 1,2 → queue: 1->2->null; dequeue removes 1 → 2->null; enqueue 3 → 2->3->null; dequeue removes 2 → 3->null; enqueue 4 → 3->4->null.
🧠 Conceptual
expertWhy update rear to null when queue becomes empty?
In a linked list queue implementation, why is it important to set the rear pointer to null when the last element is dequeued?
Attempts:
2 left
💡 Hint
Think about what happens if rear still points to old node after queue is empty.
✗ Incorrect
If rear is not set to null when queue becomes empty, enqueue will not detect empty queue and may cause incorrect linking or stale references. Setting rear to null signals the queue is empty.
