Bird
Raised Fist0
DSA Pythonprogramming~30 mins

Create a Circular Singly Linked List in DSA Python - Build from Scratch

Choose your learning style10 modes available
Create a Circular Singly Linked List
📖 Scenario: You are building a simple music playlist app. The playlist should loop back to the first song after the last one finishes, so the music never stops.
🎯 Goal: Create a circular singly linked list to represent the playlist where each node contains a song name and points to the next song. The last song should point back to the first song.
📋 What You'll Learn
Create a Node class with data and next attributes
Create a circular singly linked list with exactly three songs: 'Song A', 'Song B', and 'Song C'
Link the last node back to the first node to make the list circular
Print the playlist songs in order, stopping after printing all three songs once
💡 Why This Matters
🌍 Real World
Circular linked lists are useful in applications like music playlists, where the list loops back to the start automatically.
💼 Career
Understanding circular linked lists helps in software development roles involving data structures, game development, and real-time systems.
Progress0 / 4 steps
1
Create the Node class and three nodes
Create a class called Node with an __init__ method that takes data and sets self.data and self.next to None. Then create three nodes called node1, node2, and node3 with data 'Song A', 'Song B', and 'Song C' respectively.
DSA Python
Hint

Remember to set self.next to None inside the __init__ method.

2
Link the nodes to form a circular list
Link node1.next to node2, node2.next to node3, and node3.next back to node1 to make the list circular.
DSA Python
Hint

Make sure the last node points back to the first node to complete the circle.

3
Create a variable to start at the first node
Create a variable called current and set it to node1 to start traversing the playlist from the first song.
DSA Python
Hint

This variable will help us move through the playlist starting from the first song.

4
Print all songs in the circular list once
Use a for loop that runs exactly 3 times to print current.data and then move current to current.next in each iteration.
DSA Python
Hint

Use a loop that runs 3 times because there are 3 songs. Print the current song and then move to the next.

Practice

(1/5)
1. What is a key characteristic of a circular singly linked list compared to a regular singly linked list?
easy
A. It uses an array internally instead of nodes.
B. The last node points back to the first node, forming a circle.
C. Each node has two pointers, one to the next and one to the previous node.
D. The list has a fixed size and cannot grow.

Solution

  1. Step 1: Understand the structure of a circular singly linked list

    In a circular singly linked list, the last node's next pointer points back to the first node, creating a loop.
  2. Step 2: Compare with other list types

    Unlike doubly linked lists, nodes have only one pointer. Unlike arrays, nodes are linked dynamically. The circular nature is unique to this structure where the last node points back to the first node, forming a circle.
  3. Final Answer:

    The last node points back to the first node, forming a circle. -> Option B
  4. Quick Check:

    Circular list loops back = C [OK]
Hint: Remember: circular means last node links to first [OK]
Common Mistakes:
  • Confusing circular with doubly linked list
  • Thinking nodes have two pointers
  • Assuming fixed size like arrays
2. Which of the following is the correct way to initialize an empty circular singly linked list in Python?
easy
A. head = None
B. head = Node(0); head.next = None
C. head = Node(0); head.next = head
D. head = []

Solution

  1. Step 1: Understand empty list initialization

    An empty circular singly linked list has no nodes, so head should be None.
  2. Step 2: Analyze other options

    head = Node(0); head.next = None sets next to None, which is not circular. head = Node(0); head.next = head creates a node pointing to itself, which is a single-node circular list, not empty. head = [] uses a list, not a linked list.
  3. Final Answer:

    head = None -> Option A
  4. Quick Check:

    Empty list head = None [OK]
Hint: Empty list means head points to nothing (None) [OK]
Common Mistakes:
  • Setting head.next to None in empty list
  • Creating a node when list is empty
  • Using Python list [] instead of nodes
3. What will be the output of the following code snippet?
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

head = Node(1)
second = Node(2)
third = Node(3)

head.next = second
second.next = third
third.next = head

current = head
result = []
for _ in range(4):
    result.append(current.data)
    current = current.next
print(result)
medium
A. [1, 2, 3, 3]
B. [1, 2, 3, None]
C. [1, 2, 3, 1]
D. RuntimeError due to infinite loop

Solution

  1. Step 1: Understand the circular link setup

    Nodes 1, 2, 3 are linked in a circle: 1->2->3->1.
  2. Step 2: Trace the loop for 4 iterations

    Starting at head (1), the loop collects data: 1, then moves to 2, then 3, then back to 1.
  3. Final Answer:

    [1, 2, 3, 1] -> Option C
  4. Quick Check:

    Loop of 3 nodes repeated once = [1,2,3,1] [OK]
Hint: Follow next pointers carefully for given loop count [OK]
Common Mistakes:
  • Assuming last node points to None
  • Stopping after 3 elements instead of 4
  • Confusing data values with node references
4. Identify the error in the following code that tries to create a circular singly linked list with one node:
class Node:
    def __init__(self, data):
        self.data = data
        self.next = None

head = Node(10)
head.next = None  # Intended to point to head for circular list
medium
A. Data value 10 is invalid for circular lists
B. Node class is missing a previous pointer
C. head should be initialized as None
D. head.next should point to head, not None

Solution

  1. Step 1: Check the pointer assignment for circularity

    For a circular singly linked list with one node, the node's next must point to itself (head), not None.
  2. Step 2: Analyze the given code

    The code sets head.next = None, breaking the circular link.
  3. Final Answer:

    head.next should point to head, not None -> Option D
  4. Quick Check:

    Single node circular list loops to itself [OK]
Hint: Single node circular list next points to itself [OK]
Common Mistakes:
  • Setting next to None instead of head
  • Confusing singly with doubly linked list
  • Thinking data value affects circularity
5. You want to insert a new node with value 4 at the end of an existing circular singly linked list with nodes 1 -> 2 -> 3 -> back to 1. Which of the following code snippets correctly performs this insertion?
hard
A. new_node = Node(4) current = head while current.next != head: current = current.next current.next = new_node new_node.next = head
B. new_node = Node(4) new_node.next = head head.next = new_node
C. new_node = Node(4) head.next = new_node new_node.next = None
D. new_node = Node(4) current = head while current.next != None: current = current.next current.next = new_node new_node.next = head

Solution

  1. Step 1: Locate the last node in the circular list

    Traverse nodes until current.next points back to head, identifying the last node.
  2. Step 2: Insert new node after last node and link it back to head

    Set last node's next to new_node, then new_node's next to head to maintain circularity.
  3. Final Answer:

    Traverse until current.next != head, then set current.next = new_node and new_node.next = head -> Option A
  4. Quick Check:

    Traverse till last node, link new node, maintain circle [OK]
Hint: Find last node by checking next != head, then insert [OK]
Common Mistakes:
  • Setting new_node.next to None breaking circularity
  • Not traversing to last node correctly
  • Assuming head.next is always last node
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