Bird
0
0
DSA Cprogramming~20 mins

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

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Doubly Linked 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 10 at the beginning?
Consider a doubly linked list initially containing nodes with values 20 -> 30 -> 40 -> null. We insert a new node with value 10 at the beginning. What is the printed list after insertion?
DSA C
struct Node {
    int data;
    struct Node* prev;
    struct Node* next;
};

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

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

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

    head->data = 20; head->prev = NULL; head->next = second;
    second->data = 30; second->prev = head; second->next = third;
    third->data = 40; third->prev = second; third->next = NULL;

    head = insertAtBeginning(head, 10);
    printList(head);
    return 0;
}
A20 -> 10 -> 30 -> 40 -> null
B20 -> 30 -> 40 -> 10 -> null
C10 -> 20 -> 30 -> null
D10 -> 20 -> 30 -> 40 -> null
Attempts:
2 left
💡 Hint
Remember to update the previous pointer of the old head node.
Predict Output
intermediate
2:00remaining
What is the output after inserting 5 at the beginning of an empty list?
Given an empty doubly linked list (head is NULL), we insert a node with value 5 at the beginning. What is the printed list after insertion?
DSA C
struct Node {
    int data;
    struct Node* prev;
    struct Node* next;
};

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

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

int main() {
    struct Node* head = NULL;
    head = insertAtBeginning(head, 5);
    printList(head);
    return 0;
}
Anull
B5 -> null
C0 -> 5 -> null
D5 -> 0 -> null
Attempts:
2 left
💡 Hint
Inserting into an empty list creates a single node that is both head and tail.
🔧 Debug
advanced
2:00remaining
What error occurs when inserting at beginning with missing prev update?
Consider this code snippet for inserting at the beginning of a doubly linked list: struct Node* insertAtBeginning(struct Node* head, int data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); newNode->data = data; newNode->prev = NULL; newNode->next = head; // Missing: head->prev = newNode; head = newNode; return head; } What error or problem will occur when printing the list after insertion?
AInfinite loop during print due to broken backward links
BSegmentation fault due to invalid prev pointer
CCompilation error due to missing pointer assignment
DNo error; list prints correctly
Attempts:
2 left
💡 Hint
Think about how the prev pointers help in traversing backward and maintaining list integrity.
🧠 Conceptual
advanced
2:00remaining
Why is updating the prev pointer necessary when inserting at the beginning?
In a doubly linked list, when inserting a new node at the beginning, why must we update the previous pointer of the old head node to point to the new node?
ATo maintain the backward link so traversal from tail to head works correctly
BTo free the old head node from memory
CTo avoid memory leaks by deleting the old head
DTo make the new node point to the tail of the list
Attempts:
2 left
💡 Hint
Think about how doubly linked lists allow traversal in both directions.
Predict Output
expert
3:00remaining
What is the output after multiple insertions at beginning?
Starting with an empty doubly linked list, we insert nodes with values 50, then 40, then 30, then 20, then 10 at the beginning in that order. What is the printed list after all insertions?
DSA C
struct Node {
    int data;
    struct Node* prev;
    struct Node* next;
};

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

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

int main() {
    struct Node* head = NULL;
    head = insertAtBeginning(head, 50);
    head = insertAtBeginning(head, 40);
    head = insertAtBeginning(head, 30);
    head = insertAtBeginning(head, 20);
    head = insertAtBeginning(head, 10);
    printList(head);
    return 0;
}
A10 -> 30 -> 20 -> 40 -> 50 -> null
B50 -> 40 -> 30 -> 20 -> 10 -> null
C10 -> 20 -> 30 -> 40 -> 50 -> null
D50 -> 10 -> 40 -> 20 -> 30 -> null
Attempts:
2 left
💡 Hint
Each new node becomes the new head, pushing existing nodes to the right.