Bird
Raised Fist0
DSA Pythonprogramming~5 mins

Reverse a Doubly Linked List in DSA Python - 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 moving forward and backward through the list.
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 in each node?
We swap the 'next' pointer with the 'prev' pointer in each node. This changes the direction of the links between nodes.
Click to reveal answer
intermediate
Why do we 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 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
COnly next pointers
DOnly previous pointers
After reversing a doubly linked list, what does the head pointer point to?
AOriginal tail node
BOriginal head node
CNull
DMiddle node
What is the time complexity of reversing a doubly linked list with n nodes?
AO(n^2)
BO(n)
CO(1)
DO(log n)
Which of these is NOT true about a doubly linked list?
AEach node has pointers to next and previous nodes
BIt allows traversal in both directions
CIt can be reversed by swapping pointers
DIt stores data only in the head node
What happens if you forget to update the head pointer after reversing a doubly linked list?
ANothing changes
BThe list will reverse automatically
CThe list will appear empty or incorrect
DThe tail pointer updates instead
Explain step-by-step how to reverse a doubly linked list.
Think about how pointers change direction and how to track the new head.
You got /4 concepts.
    Describe why reversing a doubly linked list is easier than reversing a singly linked list.
    Compare pointer availability in both list types.
    You got /4 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 new head and changing traversal direction.
      3. Final Answer:

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

        Reversing swaps pointers to reverse traversal [OK]
      Hint: Reversing swaps previous and next pointers [OK]
      Common Mistakes:
      • Thinking reversing deletes nodes
      • Confusing reversing with sorting
      • Assuming it converts to singly linked list
      2. Which of the following is the correct way to swap the next and prev pointers of a node curr in Python?
      easy
      A. curr.next = curr.prev; curr.prev = curr.next
      B. curr.next, curr.prev = curr.prev, curr.next
      C. curr.prev = curr.next; curr.next = curr.prev
      D. curr.next = curr.next; curr.prev = curr.prev

      Solution

      1. Step 1: Understand Python tuple unpacking

        Using a, b = b, a swaps values of a and b simultaneously without temporary variable.
      2. Step 2: Apply to pointers

        Swapping curr.next and curr.prev correctly uses curr.next, curr.prev = curr.prev, curr.next.
      3. Final Answer:

        curr.next, curr.prev = curr.prev, curr.next -> Option B
      4. Quick Check:

        Tuple unpacking swaps pointers correctly [OK]
      Hint: Use tuple unpacking to swap pointers in one line [OK]
      Common Mistakes:
      • Assigning sequentially causing both to be same
      • Not swapping both pointers
      • Using incorrect order in assignment
      3. Given the doubly linked list: 1 <-> 2 <-> 3 <-> null, what will be the list after reversing it using the standard reverse algorithm?
      medium
      A. 3 <-> 2 <-> 1 <-> null
      B. 1 <-> 2 <-> 3 <-> null
      C. null <-> 3 <-> 2 <-> 1
      D. 3 -> 2 -> 1 -> null (singly linked list)

      Solution

      1. Step 1: Original list traversal

        The list is 1 <-> 2 <-> 3 <-> null, head at 1, tail at 3.
      2. Step 2: Reverse pointers

        Swapping next and prev pointers reverses the list, making 3 the new head and 1 the new tail.
      3. Final Answer:

        3 <-> 2 <-> 1 <-> null -> Option A
      4. Quick Check:

        Reversed list order is 3, 2, 1 [OK]
      Hint: Reversed list order is original tail to head [OK]
      Common Mistakes:
      • Confusing original order with reversed
      • Misplacing null pointer
      • Assuming singly linked list after reverse
      4. What is the error in this code snippet for reversing a doubly linked list?
      def reverse(head):
          curr = head
          while curr:
              curr.next = curr.prev
              curr.prev = curr.next
              curr = curr.prev
          return head
      medium
      A. The code correctly reverses the list
      B. The loop condition should be while curr.next
      C. Pointers are not swapped simultaneously causing incorrect links
      D. The function should return curr instead of head

      Solution

      1. Step 1: Analyze pointer swapping

        Assigning curr.next = curr.prev then curr.prev = curr.next sequentially overwrites curr.next before using it, losing original value.
      2. Step 2: Effect on traversal

        Because pointers are not swapped simultaneously, traversal using curr = curr.prev fails and links become incorrect.
      3. Final Answer:

        Pointers are not swapped simultaneously causing incorrect links -> Option C
      4. Quick Check:

        Swap pointers simultaneously to avoid overwriting [OK]
      Hint: Swap pointers in one line to avoid overwriting [OK]
      Common Mistakes:
      • Swapping pointers in two separate assignments
      • Returning old head instead of new head
      • Incorrect loop condition
      5. You have a doubly linked list with nodes containing integer values. After reversing it, you want to print the list from the new head to the end. Which of the following code snippets correctly prints the reversed list?
      hard
      A. curr = reversed_head while curr: print(curr.data, end=' <-> ') curr = curr.prev print('null')
      B. curr = reversed_head while curr.prev: print(curr.data, end=' <-> ') curr = curr.prev print('null')
      C. curr = original_head while curr: print(curr.data, end=' <-> ') curr = curr.next print('null')
      D. curr = reversed_head while curr: print(curr.data, end=' <-> ') curr = curr.next print('null')

      Solution

      1. Step 1: Identify traversal direction after reversing

        After reversing, the new head points to the start of the reversed list, and traversal should use next pointers to move forward.
      2. Step 2: Correct printing loop

        Starting from reversed_head, printing curr.data and moving with curr = curr.next prints the list in correct order until curr is null.
      3. Final Answer:

        curr = reversed_head while curr: print(curr.data, end=' <-> ') curr = curr.next print('null') -> Option D
      4. Quick Check:

        Traverse reversed list using next pointers from new head [OK]
      Hint: Print using next pointers from new head after reverse [OK]
      Common Mistakes:
      • Using prev pointer to traverse forward
      • Starting from original head after reverse
      • Loop condition stopping early
      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