Challenge - 5 Problems
Dequeue Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediateOutput of Dequeue Operations on Linked List
What is the printed state of the dequeue after these operations?
Operations:
1. EnqueueFront(10)
2. EnqueueRear(20)
3. EnqueueFront(5)
4. DequeueRear()
5. EnqueueRear(15)
Print the dequeue from front to rear.
Operations:
1. EnqueueFront(10)
2. EnqueueRear(20)
3. EnqueueFront(5)
4. DequeueRear()
5. EnqueueRear(15)
Print the dequeue from front to rear.
DSA Go
package main import "fmt" type Node struct { data int next *Node prev *Node } type Dequeue struct { front *Node rear *Node } func (dq *Dequeue) EnqueueFront(val int) { newNode := &Node{data: val} if dq.front == nil { dq.front = newNode dq.rear = newNode } else { newNode.next = dq.front dq.front.prev = newNode dq.front = newNode } } func (dq *Dequeue) EnqueueRear(val int) { newNode := &Node{data: val} if dq.rear == nil { dq.front = newNode dq.rear = newNode } else { dq.rear.next = newNode newNode.prev = dq.rear dq.rear = newNode } } func (dq *Dequeue) DequeueFront() int { if dq.front == nil { return -1 } val := dq.front.data dq.front = dq.front.next if dq.front != nil { dq.front.prev = nil } else { dq.rear = nil } return val } func (dq *Dequeue) DequeueRear() int { if dq.rear == nil { return -1 } val := dq.rear.data dq.rear = dq.rear.prev if dq.rear != nil { dq.rear.next = nil } else { dq.front = nil } return val } func (dq *Dequeue) Print() { current := dq.front for current != nil { fmt.Printf("%d -> ", current.data) current = current.next } fmt.Println("null") } func main() { dq := &Dequeue{} dq.EnqueueFront(10) dq.EnqueueRear(20) dq.EnqueueFront(5) dq.DequeueRear() dq.EnqueueRear(15) dq.Print() }
Attempts:
2 left
💡 Hint
Trace each operation step-by-step and update the front and rear pointers carefully.
✗ Incorrect
After the operations, the dequeue contains 5 at front, then 10, then 15 at rear. The DequeueRear removed 20 before adding 15 at rear.
🧠 Conceptual
intermediateUnderstanding Dequeue Front and Rear Pointers
In a dequeue implemented using a doubly linked list, which statement is TRUE about the front and rear pointers after removing the last element?
Attempts:
2 left
💡 Hint
Think about what happens when the last node is removed from the dequeue.
✗ Incorrect
When the last element is removed, the dequeue becomes empty, so both front and rear pointers must be set to nil to indicate emptiness.
🔧 Debug
advancedIdentify the Bug in Dequeue Rear Removal
What error will occur when running this DequeueRear method if the dequeue has only one element?
DSA Go
func (dq *Dequeue) DequeueRear() int { if dq.rear == nil { return -1 } val := dq.rear.data dq.rear = dq.rear.prev dq.rear.next = nil return val }
Attempts:
2 left
💡 Hint
Consider what happens when dq.rear.prev is nil and you try to access dq.rear.next.
✗ Incorrect
If the dequeue has one element, after dq.rear = dq.rear.prev, dq.rear becomes nil. Accessing dq.rear.next causes a nil pointer dereference runtime error.
📝 Syntax
advancedCorrect Syntax for EnqueueFront Method
Which option correctly implements the EnqueueFront method for a dequeue using a doubly linked list in Go?
Attempts:
2 left
💡 Hint
Check struct initialization and pointer usage carefully.
✗ Incorrect
Option C correctly initializes newNode as a pointer with data field set, and updates front and rear pointers properly. Option C uses a local variable whose address may be unsafe. Option C has wrong struct initialization syntax. Option C misses setting rear when dequeue is empty.
🚀 Application
expertResulting Dequeue State After Mixed Operations
Given an empty dequeue implemented with a doubly linked list, perform these operations in order:
EnqueueRear(1), EnqueueRear(2), EnqueueFront(0), DequeueFront(), EnqueueRear(3), DequeueRear(), EnqueueFront(-1)
What is the printed state of the dequeue from front to rear?
EnqueueRear(1), EnqueueRear(2), EnqueueFront(0), DequeueFront(), EnqueueRear(3), DequeueRear(), EnqueueFront(-1)
What is the printed state of the dequeue from front to rear?
DSA Go
package main import "fmt" type Node struct { data int next *Node prev *Node } type Dequeue struct { front *Node rear *Node } func (dq *Dequeue) EnqueueFront(val int) { newNode := &Node{data: val} if dq.front == nil { dq.front = newNode dq.rear = newNode } else { newNode.next = dq.front dq.front.prev = newNode dq.front = newNode } } func (dq *Dequeue) EnqueueRear(val int) { newNode := &Node{data: val} if dq.rear == nil { dq.front = newNode dq.rear = newNode } else { dq.rear.next = newNode newNode.prev = dq.rear dq.rear = newNode } } func (dq *Dequeue) DequeueFront() int { if dq.front == nil { return -1 } val := dq.front.data dq.front = dq.front.next if dq.front != nil { dq.front.prev = nil } else { dq.rear = nil } return val } func (dq *Dequeue) DequeueRear() int { if dq.rear == nil { return -1 } val := dq.rear.data dq.rear = dq.rear.prev if dq.rear != nil { dq.rear.next = nil } else { dq.front = nil } return val } func (dq *Dequeue) Print() { current := dq.front for current != nil { fmt.Printf("%d -> ", current.data) current = current.next } fmt.Println("null") } func main() { dq := &Dequeue{} dq.EnqueueRear(1) dq.EnqueueRear(2) dq.EnqueueFront(0) dq.DequeueFront() dq.EnqueueRear(3) dq.DequeueRear() dq.EnqueueFront(-1) dq.Print() }
Attempts:
2 left
💡 Hint
Perform each operation carefully and update front and rear pointers after each step.
✗ Incorrect
After all operations, the dequeue contains -1 at front, then 1, then 2 at rear.
