Challenge - 5 Problems
Dequeue Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediateOutput of Dequeue Operations
What is the printed state of the dequeue after performing these operations?
Operations:
1. Insert 10 at rear
2. Insert 20 at front
3. Insert 30 at rear
4. Delete from front
5. Insert 40 at front
6. Delete from rear
Operations:
1. Insert 10 at rear
2. Insert 20 at front
3. Insert 30 at rear
4. Delete from front
5. Insert 40 at front
6. Delete from rear
DSA C++
class Node { public: int data; Node* next; Node* prev; Node(int val) : data(val), next(nullptr), prev(nullptr) {} }; class Dequeue { Node* front; Node* rear; public: Dequeue() : front(nullptr), rear(nullptr) {} void insertFront(int x) { Node* temp = new Node(x); if (!front) { front = rear = temp; } else { temp->next = front; front->prev = temp; front = temp; } } void insertRear(int x) { Node* temp = new Node(x); if (!rear) { front = rear = temp; } else { rear->next = temp; temp->prev = rear; rear = temp; } } void deleteFront() { if (!front) return; Node* temp = front; front = front->next; if (front) front->prev = nullptr; else rear = nullptr; delete temp; } void deleteRear() { if (!rear) return; Node* temp = rear; rear = rear->prev; if (rear) rear->next = nullptr; else front = nullptr; delete temp; } void print() { Node* temp = front; while (temp) { std::cout << temp->data << " -> "; temp = temp->next; } std::cout << "null" << std::endl; } }; int main() { Dequeue dq; dq.insertRear(10); dq.insertFront(20); dq.insertRear(30); dq.deleteFront(); dq.insertFront(40); dq.deleteRear(); dq.print(); return 0; }
Attempts:
2 left
💡 Hint
Trace each operation step-by-step, updating the front and rear pointers carefully.
✗ Incorrect
After all operations, the dequeue contains 40 at front and 10 at rear. The sequence is 40 -> 10 -> null.
🧠 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 deleting the last element?
Attempts:
2 left
💡 Hint
Think about what happens when the dequeue becomes empty.
✗ Incorrect
When the last element is deleted, the dequeue is empty, so both front and rear pointers must be set to nullptr to indicate emptiness.
🔧 Debug
advancedIdentify the Bug in Dequeue Insert Front Method
What error will occur when running this insertFront method in a dequeue implemented with a doubly linked list?
DSA C++
void insertFront(int x) { Node* temp = new Node(x); if (!front) { front = temp; } else { temp->next = front; front->prev = temp; front = temp; } }
Attempts:
2 left
💡 Hint
Check what happens when the dequeue is initially empty.
✗ Incorrect
When the dequeue is empty, rear pointer is not set, so rear remains nullptr causing errors when rear operations are called.
❓ Predict Output
advancedResult of Mixed Dequeue Operations
What is the output after performing these operations on an empty dequeue?
1. insertRear(5)
2. insertRear(15)
3. insertFront(25)
4. deleteRear()
5. insertFront(35)
6. deleteFront()
7. insertRear(45)
Print the dequeue from front to rear.
1. insertRear(5)
2. insertRear(15)
3. insertFront(25)
4. deleteRear()
5. insertFront(35)
6. deleteFront()
7. insertRear(45)
Print the dequeue from front to rear.
DSA C++
class Node { public: int data; Node* next; Node* prev; Node(int val) : data(val), next(nullptr), prev(nullptr) {} }; class Dequeue { Node* front; Node* rear; public: Dequeue() : front(nullptr), rear(nullptr) {} void insertFront(int x) { Node* temp = new Node(x); if (!front) { front = rear = temp; } else { temp->next = front; front->prev = temp; front = temp; } } void insertRear(int x) { Node* temp = new Node(x); if (!rear) { front = rear = temp; } else { rear->next = temp; temp->prev = rear; rear = temp; } } void deleteFront() { if (!front) return; Node* temp = front; front = front->next; if (front) front->prev = nullptr; else rear = nullptr; delete temp; } void deleteRear() { if (!rear) return; Node* temp = rear; rear = rear->prev; if (rear) rear->next = nullptr; else front = nullptr; delete temp; } void print() { Node* temp = front; while (temp) { std::cout << temp->data << " -> "; temp = temp->next; } std::cout << "null" << std::endl; } }; int main() { Dequeue dq; dq.insertRear(5); dq.insertRear(15); dq.insertFront(25); dq.deleteRear(); dq.insertFront(35); dq.deleteFront(); dq.insertRear(45); dq.print(); return 0; }
Attempts:
2 left
💡 Hint
Track each operation carefully and update front and rear pointers.
✗ Incorrect
After all operations, the dequeue contains 25 at front, then 5, then 45 at rear.
🧠 Conceptual
expertTime Complexity of Dequeue Operations Using Linked List
What is the time complexity of insertFront, insertRear, deleteFront, and deleteRear operations in a dequeue implemented using a doubly linked list with front and rear pointers?
Attempts:
2 left
💡 Hint
Consider how front and rear pointers allow direct access.
✗ Incorrect
With front and rear pointers, all insert and delete operations at both ends take constant time O(1).
