Bird
0
0
DSA Cprogramming~20 mins

Reverse a 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
Output of reversing a doubly linked list
What is the printed state of the doubly linked list after reversing it?
DSA C
typedef struct Node {
    int data;
    struct Node* prev;
    struct Node* next;
} Node;

#include <stdio.h>
#include <stdlib.h>

Node* reverse(Node* head) {
    Node* temp = NULL;
    Node* current = head;
    while (current != NULL) {
        temp = current->prev;
        current->prev = current->next;
        current->next = temp;
        current = current->prev;
    }
    if (temp != NULL) {
        head = temp->prev;
    }
    return head;
}

void printList(Node* node) {
    while (node != NULL) {
        printf("%d", node->data);
        if (node->next != NULL) printf(" <-> ");
        node = node->next;
    }
    printf("\n");
}

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

    head->data = 1; head->prev = NULL; head->next = second;
    second->data = 2; second->prev = head; second->next = third;
    third->data = 3; third->prev = second; third->next = NULL;

    head = reverse(head);
    printList(head);
    return 0;
}
A3 <-> 2 <-> 1
B1 <-> 2 <-> 3
C3 -> 2 -> 1
D1 -> 2 -> 3
Attempts:
2 left
💡 Hint
Think about how the prev and next pointers are swapped in each node.
🧠 Conceptual
intermediate
1:30remaining
Understanding pointer swaps in reversing a doubly linked list
In the reversal of a doubly linked list, what is the main reason for swapping the prev and next pointers of each node?
ATo sort the list in ascending order
BTo free the memory of nodes in reverse order
CTo reverse the direction of the links so traversal order is reversed
DTo duplicate the list nodes
Attempts:
2 left
💡 Hint
Think about how links define the order of nodes.
🔧 Debug
advanced
2:00remaining
Identify the error in this reverse function for doubly linked list
What error will this reverse function cause when reversing a doubly linked list?
DSA C
Node* reverse(Node* head) {
    Node* temp = NULL;
    Node* current = head;
    while (current != NULL) {
        temp = current->next;
        current->next = current->prev;
        current->prev = temp;
        current = current->next;
    }
    if (temp != NULL) {
        head = temp->prev;
    }
    return head;
}
AIt will cause an infinite loop
BIt will reverse the list correctly
CIt will cause a segmentation fault
DIt will leave the list unchanged
Attempts:
2 left
💡 Hint
Check how current pointer moves after swapping.
Predict Output
advanced
2:00remaining
Output after reversing a doubly linked list with 4 nodes
Given a doubly linked list with nodes 10 <-> 20 <-> 30 <-> 40, what is the printed output after applying the reverse function below?
DSA C
Node* reverse(Node* head) {
    Node* temp = NULL;
    Node* current = head;
    while (current != NULL) {
        temp = current->prev;
        current->prev = current->next;
        current->next = temp;
        current = current->prev;
    }
    if (temp != NULL) {
        head = temp->prev;
    }
    return head;
}

// After reversal, printList prints nodes connected by <->
A10 -> 20 -> 30 -> 40
B40 <-> 30 <-> 20 <-> 10
C40 -> 30 -> 20 -> 10
D10 <-> 20 <-> 30 <-> 40
Attempts:
2 left
💡 Hint
The reverse function swaps prev and next pointers for each node.
🧠 Conceptual
expert
1:30remaining
Why is updating the head pointer after reversal necessary?
After reversing a doubly linked list by swapping prev and next pointers, why must we update the head pointer to the last processed node?
ABecause the list nodes are deleted and recreated
BBecause the head pointer always points to NULL after reversal
CBecause the head pointer must point to the middle node after reversal
DBecause the original head becomes the tail and the new head is the last node processed
Attempts:
2 left
💡 Hint
Think about the position of the head before and after reversal.