Bird
Raised Fist0
DSA Cprogramming~5 mins

Reverse a Doubly Linked List in DSA C - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a doubly linked list?
A doubly linked list is a chain of nodes where each node has two links: one to the next node and one to the previous node. This allows traversal in both directions.
Click to reveal answer
beginner
What does reversing a doubly linked list mean?
Reversing a doubly linked list means changing the direction of the links so that the last node becomes the first, and the first node becomes the last, effectively flipping the list.
Click to reveal answer
intermediate
In reversing a doubly linked list, what happens to the 'next' and 'prev' pointers of each node?
For each node, the 'next' pointer is swapped with the 'prev' pointer. This reverses the direction of the list.
Click to reveal answer
intermediate
Why do we need to update the head pointer after reversing a doubly linked list?
Because the original head becomes the tail after reversal, we must update the head pointer to point to the new first node (which was the original tail).
Click to reveal answer
beginner
What is the time complexity of reversing a doubly linked list?
The time complexity is O(n), where n is the number of nodes, because each node is visited once to swap its pointers.
Click to reveal answer
What pointers are swapped in each node when reversing a doubly linked list?
ANext and Prev pointers
BNext and Head pointers
CPrev and Tail pointers
DHead and Tail pointers
After reversing a doubly linked list, what should the head pointer point to?
AOriginal head node
BMiddle node
CNull
DOriginal tail node
What is the time complexity of reversing a doubly linked list with n nodes?
AO(1)
BO(n)
CO(n^2)
DO(log n)
Which of the following is NOT true about a doubly linked list?
AIt only has a pointer to the next node
BEach node has a pointer to the previous node
CIt can be traversed in both directions
DEach node has a pointer to the next node
What happens to the 'prev' pointer of the new head node after reversal?
AIt points to the old head
BIt points to the next node
CIt points to null
DIt points to itself
Explain step-by-step how to reverse a doubly linked list.
Think about what happens to each node's pointers and the head.
You got /3 concepts.
    Describe why reversing a doubly linked list is easier than reversing a singly linked list.
    Consider the extra pointer each node has.
    You got /3 concepts.

      Practice

      (1/5)
      1. What is the main purpose of reversing a doubly linked list?
      easy
      A. To convert it into a singly linked list
      B. To delete all nodes from the list
      C. To make the last node the first and the first node the last
      D. To sort the list in ascending order

      Solution

      1. Step 1: Understand the structure of a doubly linked list

        A doubly linked list has nodes with pointers to both previous and next nodes.
      2. Step 2: Define reversing operation

        Reversing means swapping the direction so the last node becomes the first and vice versa.
      3. Final Answer:

        To make the last node the first and the first node the last -> Option C
      4. Quick Check:

        Reverse = last becomes first [OK]
      Hint: Reversing flips start and end nodes [OK]
      Common Mistakes:
      • Thinking reversing deletes nodes
      • Confusing reversing with sorting
      • Assuming it changes list type
      2. Which of the following is the correct way to swap the next and prev pointers of a node in C?
      easy
      A. temp = node->prev; node->prev = node->next; node->next = node->next;
      B. node->next = node->prev; node->prev = node->next;
      C. node->prev = node->next; node->next = node->prev;
      D. temp = node->next; node->next = node->prev; node->prev = temp;

      Solution

      1. Step 1: Use a temporary variable to hold one pointer

        Store node->next in temp to avoid losing its value.
      2. Step 2: Swap pointers correctly

        Assign node->next to node->prev, then node->prev to temp.
      3. Final Answer:

        temp = node->next; node->next = node->prev; node->prev = temp; -> Option D
      4. Quick Check:

        Swap pointers using temp variable [OK]
      Hint: Always use temp variable to swap pointers safely [OK]
      Common Mistakes:
      • Swapping without temp loses pointer data
      • Assigning both pointers to same value
      • Mixing order of assignments
      3. Given the following doubly linked list nodes and code snippet, what will be the new head node's data after reversal?
      struct Node {
        int data;
        struct Node* next;
        struct Node* prev;
      };
      
      // List: 1 <-> 2 <-> 3 <-> NULL
      struct Node* head = node1; // node1->data = 1
      
      // Reversal code snippet:
      struct Node* current = head;
      struct Node* temp = NULL;
      while (current != NULL) {
        temp = current->prev;
        current->prev = current->next;
        current->next = temp;
        current = current->prev;
      }
      if (temp != NULL) {
        head = temp->prev;
      }
      medium
      A. 1
      B. 3
      C. 2
      D. NULL

      Solution

      1. Step 1: Trace pointer swaps in the loop

        Each node swaps its next and prev pointers, moving current backward through original list.
      2. Step 2: Update head after loop

        After loop, head is set to temp->prev, which points to original last node (data 3).
      3. Final Answer:

        3 -> Option B
      4. Quick Check:

        New head = original tail = 3 [OK]
      Hint: New head is original tail after reversal [OK]
      Common Mistakes:
      • Not updating head pointer after reversal
      • Confusing prev and next pointers
      • Assuming head remains same
      4. Identify the error in the following code snippet that attempts to reverse a doubly linked list:
      void reverse(struct Node** head_ref) {
        struct Node* current = *head_ref;
        struct Node* temp = NULL;
        while (current != NULL) {
          temp = current->next;
          current->next = current->prev;
          current->prev = temp;
          current = current->prev;
        }
        if (temp != NULL) {
          *head_ref = temp->prev;
        }
      }
      medium
      A. temp should store current->prev instead of current->next
      B. current should move to current->next instead of current->prev
      C. The head pointer update is incorrect
      D. No error, code is correct

      Solution

      1. Step 1: Verify pointer swaps

        The next/prev swaps correctly reverse directions as current traverses the original next chain (now in prev).
      2. Step 2: Analyze temp assignment

        Temp should store current->prev before swapping, not current->next, to avoid losing pointer.
      3. Final Answer:

        temp should store current->prev instead of current->next -> Option A
      4. Quick Check:

        Correct temp assignment preserves traversal [OK]
      Hint: Temp must hold current->prev before swapping pointers [OK]
      Common Mistakes:
      • Incorrect head pointer update logic
      • Moving current incorrectly after swap
      • Not updating head pointer properly
      5. You have a doubly linked list with nodes containing integer data. After reversing the list using the standard pointer swap method, which of the following statements is TRUE about the list's traversal?
      hard
      A. Traversing from the new head using next pointers visits nodes in original reverse order
      B. Traversing from the new head using prev pointers visits nodes in original order
      C. Traversing from the original head using next pointers visits nodes in reversed order
      D. Traversing from the new head using next pointers visits nodes in original order

      Solution

      1. Step 1: Understand reversal effect on pointers

        Reversing swaps next and prev pointers, so next pointers now point backward in original list.
      2. Step 2: Analyze traversal from new head

        Starting at new head, following next pointers visits nodes in original reverse order.
      3. Final Answer:

        Traversing from the new head using next pointers visits nodes in original reverse order -> Option A
      4. Quick Check:

        Next pointers after reverse = original prev [OK]
      Hint: Next pointers after reverse follow original prev links [OK]
      Common Mistakes:
      • Assuming next pointers still go forward after reverse
      • Confusing traversal directions
      • Thinking original head remains start
      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