Bird
Raised Fist0
DSA C#programming~20 mins

Create a Circular Singly Linked List in DSA C# - Practice Problems & Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Circular List Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output after inserting nodes in a circular singly linked list?
Consider the following C# code that inserts nodes into a circular singly linked list. What will be the printed output?
DSA C#
public class Node {
    public int data;
    public Node next;
    public Node(int data) {
        this.data = data;
        this.next = null;
    }
}

public class CircularSinglyLinkedList {
    public Node head = null;

    public void Insert(int data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = newNode;
            newNode.next = head;
        } else {
            Node temp = head;
            while (temp.next != head) {
                temp = temp.next;
            }
            temp.next = newNode;
            newNode.next = head;
        }
    }

    public void PrintList() {
        if (head == null) return;
        Node temp = head;
        do {
            System.Console.Write(temp.data + " -> ");
            temp = temp.next;
        } while (temp != head);
        System.Console.WriteLine("null");
    }
}

var list = new CircularSinglyLinkedList();
list.Insert(10);
list.Insert(20);
list.Insert(30);
list.PrintList();
A10 -> 20 -> 30 -> null
B10 -> 20 -> 30 -> 10 -> null
C30 -> 20 -> 10 -> null
D10 -> 20 -> null
Attempts:
2 left
💡 Hint
Remember that in a circular singly linked list, the last node points back to the head, but printing stops when we reach the head again.
❓ Predict Output
intermediate
2:00remaining
What is the output after deleting a node from a circular singly linked list?
Given the following code that deletes a node with a specific value from a circular singly linked list, what will be the printed output after deleting the node with value 20?
DSA C#
public class Node {
    public int data;
    public Node next;
    public Node(int data) {
        this.data = data;
        this.next = null;
    }
}

public class CircularSinglyLinkedList {
    public Node head = null;

    public void Insert(int data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = newNode;
            newNode.next = head;
        } else {
            Node temp = head;
            while (temp.next != head) {
                temp = temp.next;
            }
            temp.next = newNode;
            newNode.next = head;
        }
    }

    public void Delete(int key) {
        if (head == null) return;
        Node curr = head, prev = null;
        do {
            if (curr.data == key) {
                if (prev != null) {
                    prev.next = curr.next;
                    if (curr == head) head = curr.next;
                } else {
                    Node temp = head;
                    while (temp.next != head) {
                        temp = temp.next;
                    }
                    if (head == head.next) {
                        head = null;
                    } else {
                        temp.next = head.next;
                        head = head.next;
                    }
                }
                return;
            }
            prev = curr;
            curr = curr.next;
        } while (curr != head);
    }

    public void PrintList() {
        if (head == null) {
            System.Console.WriteLine("List is empty");
            return;
        }
        Node temp = head;
        do {
            System.Console.Write(temp.data + " -> ");
            temp = temp.next;
        } while (temp != head);
        System.Console.WriteLine("null");
    }
}

var list = new CircularSinglyLinkedList();
list.Insert(10);
list.Insert(20);
list.Insert(30);
list.Delete(20);
list.PrintList();
A20 -> 30 -> null
B10 -> 20 -> 30 -> null
CList is empty
D10 -> 30 -> null
Attempts:
2 left
💡 Hint
Deleting a node removes it from the list and updates links to maintain circularity.
🔧 Debug
advanced
2:00remaining
Identify the error in this circular singly linked list insertion code
What error will this code produce when inserting nodes into a circular singly linked list?
DSA C#
public class Node {
    public int data;
    public Node next;
    public Node(int data) {
        this.data = data;
        this.next = null;
    }
}

public class CircularSinglyLinkedList {
    public Node head = null;

    public void Insert(int data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = newNode;
            newNode.next = null;
        } else {
            Node temp = head;
            while (temp.next != head) {
                temp = temp.next;
            }
            temp.next = newNode;
            newNode.next = head;
        }
    }
}
ANullReferenceException when inserting second node
BThe list will not be circular because newNode.next is set to null for the first node
CInfinite loop when printing the list
DNo error, code works correctly
Attempts:
2 left
💡 Hint
Check how the first node's next pointer is set.
❓ Predict Output
advanced
2:00remaining
What is the output after traversing a circular singly linked list with one node?
Given this code that creates a circular singly linked list with one node and prints it, what is the output?
DSA C#
public class Node {
    public int data;
    public Node next;
    public Node(int data) {
        this.data = data;
        this.next = null;
    }
}

public class CircularSinglyLinkedList {
    public Node head = null;

    public void Insert(int data) {
        Node newNode = new Node(data);
        if (head == null) {
            head = newNode;
            newNode.next = head;
        } else {
            Node temp = head;
            while (temp.next != head) {
                temp = temp.next;
            }
            temp.next = newNode;
            newNode.next = head;
        }
    }

    public void PrintList() {
        if (head == null) {
            System.Console.WriteLine("List is empty");
            return;
        }
        Node temp = head;
        do {
            System.Console.Write(temp.data + " -> ");
            temp = temp.next;
        } while (temp != head);
        System.Console.WriteLine("null");
    }
}

var list = new CircularSinglyLinkedList();
list.Insert(100);
list.PrintList();
Anull
B100 -> 100 -> null
C100 -> null
DList is empty
Attempts:
2 left
💡 Hint
A single node points to itself in a circular singly linked list.
🧠 Conceptual
expert
2:00remaining
What is the time complexity of inserting a node at the end of a circular singly linked list without a tail pointer?
Consider a circular singly linked list that only keeps a reference to the head node (no tail pointer). What is the time complexity of inserting a new node at the end of the list?
AO(n) linear time
BO(1) constant time
CO(log n) logarithmic time
DO(n^2) quadratic time
Attempts:
2 left
💡 Hint
Think about how you find the last node when you only have the head reference.

Practice

(1/5)
1. What is the key difference between a circular singly linked list and a regular singly linked list?
easy
A. The last node points to null in a circular singly linked list.
B. Nodes have two pointers in a circular singly linked list.
C. The last node points back to the first node in a circular singly linked list.
D. Nodes are stored in an array in a circular singly linked list.

Solution

  1. Step 1: Understand the node connection in a regular singly linked list

    In a regular singly linked list, the last node's next pointer is null, marking the end.
  2. Step 2: Understand the node connection in a circular singly linked list

    In a circular singly linked list, the last node's next pointer points back to the first node, forming a circle.
  3. Final Answer:

    The last node points back to the first node in a circular singly linked list. -> Option C
  4. Quick Check:

    Last node next = first node in circular list [OK]
Hint: Remember: circular means last node loops to first [OK]
Common Mistakes:
  • Thinking last node points to null in circular list
  • Confusing circular with doubly linked list
  • Assuming nodes have two pointers in circular singly linked list
2. Which of the following is the correct way to initialize a circular singly linked list with one node in C#?
easy
A. Node head = new Node(5); head.next = head;
B. Node head = new Node(5); head.next = null;
C. Node head = null; head.next = head;
D. Node head = new Node(5); head = null;

Solution

  1. Step 1: Create a new node with value 5

    Node head = new Node(5); creates a node with data 5.
  2. Step 2: Point the node's next to itself to form a circular link

    head.next = head; makes the list circular with one node.
  3. Final Answer:

    Node head = new Node(5); head.next = head; -> Option A
  4. Quick Check:

    Single node next points to itself [OK]
Hint: Single node circular list points next to itself [OK]
Common Mistakes:
  • Setting next to null instead of self
  • Assigning null to head after creation
  • Trying to set next on a null head
3. What will be the output of the following code snippet that creates a circular singly linked list with nodes 1, 2, 3 and prints them once?
class Node {
  public int data;
  public Node next;
  public Node(int d) { data = d; next = null; }
}

Node head = new Node(1);
Node second = new Node(2);
Node third = new Node(3);
head.next = second;
second.next = third;
third.next = head; // circular link

Node temp = head;
do {
  Console.Write(temp.data + " -> ");
  temp = temp.next;
} while (temp != head);
Console.WriteLine("null");
medium
A. 1 -> 2 -> null
B. 1 -> 2 -> 3 -> 1 -> 2 -> 3 -> null
C. 1 -> 2 -> 3 -> 3 -> null
D. 1 -> 2 -> 3 -> null

Solution

  1. Step 1: Create nodes and link them circularly

    Nodes 1, 2, 3 are linked so that third.next points back to head, forming a circle.
  2. Step 2: Traverse and print nodes once using do-while loop

    The loop prints data starting at head and stops when temp returns to head, printing 1, 2, 3 once.
  3. Final Answer:

    1 -> 2 -> 3 -> null -> Option D
  4. Quick Check:

    Loop prints each node once before stopping [OK]
Hint: do-while stops after one full circle [OK]
Common Mistakes:
  • Using while loop without do causes skipping first node
  • Printing nodes infinitely without stop condition
  • Confusing circular list with linear list output
4. Identify the error in this code snippet that tries to insert a new node with value 4 at the end of a circular singly linked list:
Node newNode = new Node(4);
Node temp = head;
while (temp.next != null) {
  temp = temp.next;
}
temp.next = newNode;
newNode.next = head;
medium
A. newNode.next should be null, not head.
B. The while loop condition should check for temp.next != head, not null.
C. temp should be initialized to null before the loop.
D. The newNode should be created after the loop.

Solution

  1. Step 1: Understand circular list's last node pointer

    In a circular singly linked list, the last node's next points to head, never null.
  2. Step 2: Correct the loop condition to find last node

    The loop should check temp.next != head to stop at the last node, not temp.next != null.
  3. Final Answer:

    The while loop condition should check for temp.next != head, not null. -> Option B
  4. Quick Check:

    Last node next = head, not null [OK]
Hint: In circular list, last node points to head, not null [OK]
Common Mistakes:
  • Using null check in circular list traversal
  • Setting newNode.next to null breaking circularity
  • Initializing temp incorrectly
5. You want to create a circular singly linked list from an array of integers [10, 20, 30, 40]. Which approach correctly creates the circular list and returns the head node?
public Node CreateCircularList(int[] arr) {
  if (arr.Length == 0) return null;
  Node head = new Node(arr[0]);
  Node current = head;
  for (int i = 1; i < arr.Length; i++) {
    current.next = new Node(arr[i]);
    current = current.next;
  }
  // What should be here?
}
hard
A. current.next = head; return head;
B. current.next = null; return head;
C. head.next = current; return current;
D. return current;

Solution

  1. Step 1: Create nodes from array and link linearly

    Loop creates nodes for each array element and links them in order.
  2. Step 2: Make the list circular by linking last node to head

    Setting current.next = head closes the loop, making the list circular.
  3. Step 3: Return the head node

    Return head to provide access to the circular list.
  4. Final Answer:

    current.next = head; return head; -> Option A
  5. Quick Check:

    Last node points to head to form circle [OK]
Hint: Close circle by linking last node to head [OK]
Common Mistakes:
  • Leaving last node next as null
  • Returning last node instead of head
  • Linking head.next to last node instead of last.next to head
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