Bird
Raised Fist0
DSA C#programming~20 mins

Queue Implementation Using Linked List in DSA C# - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Queue Mastery Badge
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output after enqueue and dequeue operations?

Consider a queue implemented using a linked list. After performing the following operations, what is the printed state of the queue?

Enqueue(10)
Enqueue(20)
Enqueue(30)
Dequeue()
Enqueue(40)

Print the queue from front to rear.

DSA C#
class Node {
    public int data;
    public Node next;
    public Node(int d) { data = d; next = null; }
}

class Queue {
    private Node front, rear;

    public Queue() { front = rear = null; }

    public void Enqueue(int item) {
        Node temp = new Node(item);
        if (rear == null) {
            front = rear = temp;
            return;
        }
        rear.next = temp;
        rear = temp;
    }

    public int Dequeue() {
        if (front == null) return -1;
        int item = front.data;
        front = front.next;
        if (front == null) rear = null;
        return item;
    }

    public string PrintQueue() {
        Node temp = front;
        string result = "";
        while (temp != null) {
            result += temp.data + " -> ";
            temp = temp.next;
        }
        return result + "null";
    }
}

Queue q = new Queue();
q.Enqueue(10);
q.Enqueue(20);
q.Enqueue(30);
q.Dequeue();
q.Enqueue(40);
Console.WriteLine(q.PrintQueue());
A20 -> 30 -> 40 -> null
B20 -> 30 -> null
C30 -> 40 -> null
D10 -> 20 -> 30 -> 40 -> null
Attempts:
2 left
💡 Hint

Remember that dequeue removes the front element.

🧠 Conceptual
intermediate
1:00remaining
What happens when dequeue is called on an empty queue?

In a queue implemented using a linked list, what is the expected behavior when Dequeue() is called but the queue is empty?

AThrows a NullReferenceException
BReturns -1 indicating the queue is empty
CReturns 0 as default value
DAdds a new node with value 0 to the queue
Attempts:
2 left
💡 Hint

Check the Dequeue method's return value when front is null.

🔧 Debug
advanced
1:30remaining
Identify the bug in this enqueue method

What is the bug in the following enqueue method for a linked list queue?

public void Enqueue(int item) {
    Node temp = new Node(item);
    if (front == null) {
        front = temp;
    }
    rear.next = temp;
    rear = temp;
}
Atemp node is not created properly
Bfront is not updated when queue is empty
Crear is not updated after enqueue
Drear.next will cause NullReferenceException when queue is empty
Attempts:
2 left
💡 Hint

Think about what happens when the queue is empty and rear is null.

❓ Predict Output
advanced
2:00remaining
What is the queue state after multiple dequeues?

Given the following operations on a linked list queue, what is the printed queue?

Enqueue(5)
Enqueue(15)
Enqueue(25)
Dequeue()
Dequeue()
Enqueue(35)

Print the queue from front to rear.

DSA C#
class Node {
    public int data;
    public Node next;
    public Node(int d) { data = d; next = null; }
}

class Queue {
    private Node front, rear;

    public Queue() { front = rear = null; }

    public void Enqueue(int item) {
        Node temp = new Node(item);
        if (rear == null) {
            front = rear = temp;
            return;
        }
        rear.next = temp;
        rear = temp;
    }

    public int Dequeue() {
        if (front == null) return -1;
        int item = front.data;
        front = front.next;
        if (front == null) rear = null;
        return item;
    }

    public string PrintQueue() {
        Node temp = front;
        string result = "";
        while (temp != null) {
            result += temp.data + " -> ";
            temp = temp.next;
        }
        return result + "null";
    }
}

Queue q = new Queue();
q.Enqueue(5);
q.Enqueue(15);
q.Enqueue(25);
q.Dequeue();
q.Dequeue();
q.Enqueue(35);
Console.WriteLine(q.PrintQueue());
A25 -> 35 -> null
B15 -> 25 -> 35 -> null
C25 -> null
D35 -> null
Attempts:
2 left
💡 Hint

Track the front pointer after each dequeue.

🧠 Conceptual
expert
1:30remaining
Why is a linked list preferred over an array for queue implementation in some cases?

Which of the following is the best reason to use a linked list instead of an array to implement a queue?

ALinked list provides faster random access than arrays
BLinked list uses less memory than arrays always
CLinked list allows dynamic size without resizing overhead
DLinked list is easier to implement than arrays
Attempts:
2 left
💡 Hint

Think about resizing and memory allocation.

Practice

(1/5)
1. What is the main advantage of implementing a queue using a linked list instead of an array?
easy
A. Dynamic size without fixed capacity
B. Faster access to elements by index
C. Uses less memory for small queues
D. Simpler syntax for enqueue operation

Solution

  1. Step 1: Understand array limitations

    Arrays have fixed size, so queues using arrays need resizing or have limited capacity.
  2. Step 2: Linked list flexibility

    Linked lists grow dynamically by adding nodes, so queues can expand without size limits.
  3. Final Answer:

    Dynamic size without fixed capacity -> Option A
  4. Quick Check:

    Linked list queues grow dynamically = D [OK]
Hint: Linked lists grow dynamically, arrays do not [OK]
Common Mistakes:
  • Thinking arrays allow dynamic resizing easily
  • Confusing access speed with size flexibility
  • Assuming linked lists use less memory always
2. Which of the following is the correct way to declare a node class for a linked list queue in C#?
easy
A. class Node { int data; Node next; }
B. public class Node { public int data; public Node next; }
C. public struct Node { public int data; public Node next; }
D. public class Node { private int data; private Node next; }

Solution

  1. Step 1: Check access modifiers

    For queue operations, node fields must be accessible; public allows this.
  2. Step 2: Class vs struct

    Node should be a class to allow reference behavior; struct is value type and not suitable here.
  3. Final Answer:

    public class Node { public int data; public Node next; } -> Option B
  4. Quick Check:

    Public class with public fields = A [OK]
Hint: Use public class with public fields for linked list nodes [OK]
Common Mistakes:
  • Using struct instead of class for nodes
  • Omitting public keyword causing access errors
  • Making fields private without accessors
3. What will be the output after executing the following C# code for a linked list queue?
Queue queue = new Queue();
queue.Enqueue(10);
queue.Enqueue(20);
queue.Enqueue(30);
int first = queue.Dequeue();
queue.Enqueue(40);
int second = queue.Dequeue();
Console.WriteLine(first + ", " + second);
medium
A. 10, 30
B. 20, 30
C. 10, 20
D. 20, 40

Solution

  1. Step 1: Trace enqueue and dequeue operations

    Enqueue 10, 20, 30 adds these in order. Dequeue removes 10 (first). Enqueue 40 adds at end. Dequeue removes 20 (next).
  2. Step 2: Identify values of first and second

    first = 10, second = 20. Output prints "10, 20".
  3. Final Answer:

    10, 20 -> Option C
  4. Quick Check:

    FIFO order = 10, 20 [OK]
Hint: Remember queue removes oldest element first (FIFO) [OK]
Common Mistakes:
  • Confusing enqueue and dequeue order
  • Assuming dequeue removes last element
  • Mixing values after enqueue and dequeue
4. Identify the error in the following dequeue method of a linked list queue and select the fix:
public int Dequeue() {
  if (front == null) throw new InvalidOperationException("Queue is empty");
  int value = front.data;
  front = front.next;
  return value;
}
medium
A. Should set rear to null when queue becomes empty
B. Should throw NullReferenceException instead
C. No error; method is correct
D. Should update front.next to null before returning

Solution

  1. Step 1: Analyze dequeue when one element remains

    If front moves to null after removing last node, rear still points to old node, causing inconsistency.
  2. Step 2: Fix by setting rear to null when queue is empty

    When front is null, rear must also be set to null to indicate empty queue properly.
  3. Final Answer:

    Should set rear to null when queue becomes empty -> Option A
  4. Quick Check:

    Rear must be null if front is null [OK]
Hint: Set rear null when queue empties after dequeue [OK]
Common Mistakes:
  • Ignoring rear pointer update on empty queue
  • Throwing wrong exception type
  • Unnecessary null assignment to front.next
5. You want to implement a method ReverseQueue() that reverses the order of elements in a linked list queue without using extra data structures. Which approach is best?
hard
A. Dequeue all elements and enqueue them back in reverse order using a stack
B. Swap data values between front and rear nodes repeatedly
C. Create a new queue and enqueue elements in reverse order by traversing original queue
D. Iteratively reverse the linked list nodes by changing next pointers

Solution

  1. Step 1: Understand reversing linked list nodes

    Changing next pointers of nodes reverses the linked list in place without extra space.
  2. Step 2: Compare with other options

    Using stack or new queue uses extra space; swapping data is inefficient and error-prone.
  3. Final Answer:

    Iteratively reverse the linked list nodes by changing next pointers -> Option D
  4. Quick Check:

    In-place reversal changes pointers = B [OK]
Hint: Reverse linked list by pointer changes, no extra space [OK]
Common Mistakes:
  • Using extra data structures despite constraint
  • Swapping data instead of pointers
  • Creating new queues unnecessarily
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard