Bird
Raised Fist0
DSA Javaprogramming~5 mins

Reverse a Doubly Linked List in DSA Java - 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 three parts: data, a pointer to the next node, and a pointer to the previous node. This allows traversal in both forward and backward 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 list so that the last node becomes the first, and the first becomes the last. The next and previous pointers of each node are swapped.
Click to reveal answer
intermediate
In reversing a doubly linked list, what pointers do we swap for each node?
For each node, we swap the 'next' pointer with the 'previous' pointer. This changes the direction of the links between nodes.
Click to reveal answer
intermediate
Why do we need to update the head pointer after reversing a doubly linked list?
Because after reversing, the original tail becomes the new head. We must update the head pointer to point to this new first node to correctly represent the reversed list.
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. We visit each node once to swap its pointers.
Click to reveal answer
What pointers are swapped in each node when reversing a doubly linked list?
ANext and previous pointers
BData and next pointers
CHead and tail pointers
DOnly next pointers
After reversing a doubly linked list, what should the head pointer point to?
AOriginal tail node
BOriginal head node
CMiddle node
DNull
What is the time complexity to reverse 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?
AEach node has a pointer to the next node
BEach node has a pointer to the previous node
CNodes can only be traversed forward
DIt allows traversal in both directions
What happens to the previous pointer of the original head node after reversing?
AIt remains unchanged
BIt points to the next node
CIt points to the original tail
DIt becomes null
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.
    Why is it important to swap both next and previous pointers when reversing a doubly linked list?
    Consider how traversal depends on these pointers.
    You got /3 concepts.

      Practice

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

      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, allowing traversal in both directions.
      2. Step 2: Purpose of reversing

        Reversing swaps the previous and next pointers of each node, making the last node the first and vice versa.
      3. Final Answer:

        To change the direction of traversal so the last node becomes the first -> Option A
      4. Quick Check:

        Reversing means swapping directions [OK]
      Hint: Reversing flips the list direction, last becomes first [OK]
      Common Mistakes:
      • Confusing reversing with deleting nodes
      • Thinking reversing sorts the list
      • Assuming it converts to singly linked list
      2. Which of the following Java code snippets correctly swaps the next and prev pointers of a node curr in a doubly linked list?
      easy
      A. curr.next = curr.prev; curr.prev = null;
      B. Node temp = curr.prev; curr.prev = curr.next; curr.next = null;
      C. curr.next = curr.prev; curr.prev = curr.next;
      D. Node temp = curr.next; curr.next = curr.prev; curr.prev = temp;

      Solution

      1. Step 1: Identify correct swapping logic

        Swapping two pointers requires a temporary variable to hold one pointer before overwriting it.
      2. Step 2: Check each option

        A temporary variable is required to swap pointers without data loss. curr.next = curr.prev; curr.prev = null; incorrectly sets prev to null. Node temp = curr.prev; curr.prev = curr.next; curr.next = null; uses temp but wrongly sets next to null. curr.next = curr.prev; curr.prev = curr.next; overwrites without preserving original values. Node temp = curr.next; curr.next = curr.prev; curr.prev = temp; correctly swaps the pointers.
      3. Final Answer:

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

        Use temp variable to swap pointers [OK]
      Hint: Always use a temp variable to swap two pointers [OK]
      Common Mistakes:
      • Swapping without a temporary variable
      • Setting one pointer to null accidentally
      • Swapping pointers in wrong order
      3. Given the following doubly linked list nodes and code to reverse it, what will be the printed output after reversal?
      class Node {
        int data;
        Node prev, next;
        Node(int d) { data = d; prev = next = null; }
      }
      
      // List: 1 <-> 2 <-> 3
      Node head = new Node(1);
      Node second = new Node(2);
      Node third = new Node(3);
      head.next = second; second.prev = head;
      second.next = third; third.prev = second;
      
      // Reverse code snippet
      Node curr = head;
      Node temp = null;
      while (curr != null) {
        temp = curr.prev;
        curr.prev = curr.next;
        curr.next = temp;
        curr = curr.prev;
      }
      if (temp != null) head = temp.prev;
      
      // Print list forward
      Node ptr = head;
      while (ptr != null) {
        System.out.print(ptr.data + " ");
        ptr = ptr.next;
      }
      medium
      A. 1 2 3
      B. 3 2 1
      C. 3 1 2
      D. 2 3 1

      Solution

      1. Step 1: Understand reversal logic

        The code swaps prev and next for each node, then moves curr to the original next node (now prev after swap).
      2. Step 2: Trace the list after reversal

        Original list: 1 <-> 2 <-> 3
        After reversal, head points to node with data 3.
        Printing from head forward prints: 3 2 1
      3. Final Answer:

        3 2 1 -> Option B
      4. Quick Check:

        Reversed list prints nodes backward [OK]
      Hint: After reversal, head points to original tail node [OK]
      Common Mistakes:
      • Not updating head after reversal
      • Confusing prev and next pointers
      • Printing from old head instead of new head
      4. Identify the error in the following code snippet that attempts to reverse a doubly linked list:
      Node curr = head;
      while (curr != null) {
        Node temp = curr.next;
        curr.next = curr.prev;
        curr.prev = temp;
        curr = curr.next;
      }
      medium
      A. The pointers next and prev are not swapped correctly
      B. The temp variable should store curr.prev, not curr.next
      C. The loop moves curr to curr.next instead of curr.prev after swapping
      D. The loop condition should be curr.next != null

      Solution

      1. Step 1: Analyze pointer swapping

        The code swaps next and prev correctly using temp.
      2. Step 2: Check loop iteration step

        After swapping, curr.next points to the original prev. To move forward in the original list, curr should move to curr.prev (which is original next). The code incorrectly moves to curr.next, causing wrong traversal.
      3. Final Answer:

        The loop moves curr to curr.next instead of curr.prev after swapping -> Option C
      4. Quick Check:

        Move curr to curr.prev after swapping [OK]
      Hint: After swapping, move curr to curr.prev to continue traversal [OK]
      Common Mistakes:
      • Moving curr to wrong pointer after swap
      • Confusing temp usage
      • Incorrect loop condition
      5. You have a doubly linked list with nodes containing integer data. After reversing the list using the standard pointer swap method, you want to find the middle node efficiently. Which approach is best to find the middle node after reversal?
      hard
      A. Use two pointers starting from the new head: one moves one step, the other moves two steps until the faster reaches null
      B. Traverse from the original head before reversal to find the middle
      C. Count nodes from the tail and divide by two to find middle index
      D. Reverse the list again and then find the middle node

      Solution

      1. Step 1: Understand list reversal effect

        After reversal, the head points to the original tail. The list is still doubly linked and can be traversed forward.
      2. Step 2: Efficient middle node finding

        The two-pointer technique (slow and fast pointers) starting from the new head finds the middle in one pass efficiently.
      3. Final Answer:

        Use two pointers starting from the new head: one moves one step, the other moves two steps until the faster reaches null -> Option A
      4. Quick Check:

        Two-pointer method finds middle in O(n) [OK]
      Hint: Use slow and fast pointers from new head to find middle [OK]
      Common Mistakes:
      • Trying to find middle from old head after reversal
      • Counting nodes from tail which is inefficient
      • Reversing list again unnecessarily
      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