Bird
0
0
DSA Cprogramming~20 mins

Insert at Beginning of Circular Linked List in DSA C - Practice Problems & Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Circular Linked List Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
Predict Output
intermediate
2:00remaining
Output after inserting a node at the beginning
What is the printed state of the circular linked list after inserting 10 at the beginning of the list containing 20 -> 30 -> 40?
DSA C
/* Circular linked list node structure */
#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int data;
    struct Node* next;
} Node;

/* Function to insert at beginning */
Node* insertAtBeginning(Node* head, int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    if (head == NULL) {
        newNode->next = newNode;
        return newNode;
    }
    Node* temp = head;
    while (temp->next != head) {
        temp = temp->next;
    }
    temp->next = newNode;
    newNode->next = head;
    return newNode;
}

/* Function to print circular linked list */
void printList(Node* head) {
    if (head == NULL) return;
    Node* temp = head;
    do {
        printf("%d -> ", temp->data);
        temp = temp->next;
    } while (temp != head);
    printf("null\n");
}

int main() {
    Node* head = (Node*)malloc(sizeof(Node));
    Node* second = (Node*)malloc(sizeof(Node));
    Node* third = (Node*)malloc(sizeof(Node));

    head->data = 20;
    second->data = 30;
    third->data = 40;

    head->next = second;
    second->next = third;
    third->next = head;

    head = insertAtBeginning(head, 10);
    printList(head);
    return 0;
}
A10 -> 30 -> 40 -> 20 -> null
B20 -> 30 -> 40 -> 10 -> null
C10 -> 20 -> 30 -> 40 -> null
D20 -> 10 -> 30 -> 40 -> null
Attempts:
2 left
💡 Hint
Remember that in a circular linked list, the last node points back to the head. Inserting at the beginning means the new node becomes the new head.
🧠 Conceptual
intermediate
1:30remaining
Understanding pointer updates in circular linked list insertion
Which pointer update is essential to maintain the circular nature of the list when inserting a new node at the beginning?
AUpdating the new node's next pointer to point to the old head and the last node's next pointer to the new node
BUpdating the new node's next pointer to NULL and the last node's next pointer to the new node
CUpdating the last node's next pointer to NULL and the new node's next pointer to the old head
DUpdating the old head's next pointer to the new node and the new node's next pointer to NULL
Attempts:
2 left
💡 Hint
Think about how the last node should point after insertion to keep the list circular.
🔧 Debug
advanced
2:00remaining
Identify the bug in this insertion code
What error will occur when running this code to insert at the beginning of a circular linked list?
DSA C
Node* insertAtBeginning(Node* head, int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    newNode->next = head;
    if (head == NULL) {
        head = newNode;
        return head;
    }
    Node* temp = head;
    while (temp->next != head) {
        temp = temp->next;
    }
    temp->next = newNode;
    return newNode;
}
AInfinite loop or segmentation fault due to incorrect loop condition
BNo error, code runs correctly
CMemory leak due to missing free() calls
DCompilation error due to missing semicolon
Attempts:
2 left
💡 Hint
Check the loop condition for traversing the circular linked list.
Predict Output
advanced
2:00remaining
Output after multiple insertions at beginning
What is the printed state of the circular linked list after inserting 50, then 40, then 30 at the beginning of an empty list?
DSA C
/* Insert multiple nodes at beginning */
#include <stdio.h>
#include <stdlib.h>

typedef struct Node {
    int data;
    struct Node* next;
} Node;

Node* insertAtBeginning(Node* head, int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    newNode->data = data;
    if (head == NULL) {
        newNode->next = newNode;
        return newNode;
    }
    Node* temp = head;
    while (temp->next != head) {
        temp = temp->next;
    }
    temp->next = newNode;
    newNode->next = head;
    return newNode;
}

void printList(Node* head) {
    if (head == NULL) return;
    Node* temp = head;
    do {
        printf("%d -> ", temp->data);
        temp = temp->next;
    } while (temp != head);
    printf("null\n");
}

int main() {
    Node* head = NULL;
    head = insertAtBeginning(head, 50);
    head = insertAtBeginning(head, 40);
    head = insertAtBeginning(head, 30);
    printList(head);
    return 0;
}
A50 -> 40 -> 30 -> null
B30 -> 40 -> 50 -> null
C40 -> 30 -> 50 -> null
D30 -> 50 -> 40 -> null
Attempts:
2 left
💡 Hint
Each insertion at beginning makes the new node the head.
🧠 Conceptual
expert
1:30remaining
Time complexity of insertion at beginning in circular linked list
What is the time complexity of inserting a node at the beginning of a circular linked list when you only have a pointer to the head node?
AO(n^2) because of nested traversal
BO(1) because you can insert immediately at the head without traversal
CO(log n) because of binary search on nodes
DO(n) because you must traverse to the last node to update its next pointer
Attempts:
2 left
💡 Hint
Think about what pointer updates are needed and if you can access the last node directly.