Bird
Raised Fist0
DSA Typescriptprogramming~5 mins

Reverse a Doubly Linked List in DSA Typescript - 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
Why do we need to swap the next and previous pointers when reversing a doubly linked list?
Swapping the next and previous pointers reverses the direction of the list. The next pointer becomes the previous, and the previous becomes the next, so traversal order flips.
Click to reveal answer
beginner
In reversing a doubly linked list, what should be the new head of the list?
The new head is the last node of the original list because after reversing, the last node becomes the first node.
Click to reveal answer
intermediate
Show the TypeScript code snippet to swap next and prev pointers of a node in a doubly linked list.
const temp = node.next;
node.next = node.prev;
node.prev = temp;
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 pointers.
Click to reveal answer
What pointers do you swap to reverse a doubly linked list node?
Anext and prev
Bnext and data
Cprev and data
Dhead and tail
After reversing, what happens to the original tail node?
AIt becomes the new head
BIt is removed
CIt stays the tail
DIt becomes null
What is the first step in reversing a doubly linked list?
ACreate a new list
BDelete all nodes
CTraverse the list swapping next and prev for each node
DSwap data values only
What is the time complexity of reversing a doubly linked list?
AO(n^2)
BO(n)
CO(1)
DO(log n)
Which pointer should be updated last after reversing all nodes?
ATail pointer
BPrev pointer of last node
CNext pointer of first node
DHead pointer
Explain step-by-step how to reverse a doubly linked list.
Think about how pointers change direction.
You got /4 concepts.
    Write the TypeScript code to reverse a doubly linked list and explain how it works.
    Focus on pointer swaps and head update.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of reversing a doubly linked list?
      easy
      A. To sort the nodes in ascending order
      B. To reverse the order of nodes so the last becomes first and vice versa
      C. To delete all nodes from the list
      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.
      2. Step 2: Purpose of reversing

        Reversing swaps the direction so the last node becomes the first and the first becomes the last.
      3. Final Answer:

        To reverse the order of nodes so the last becomes first and vice versa -> Option B
      4. Quick Check:

        Reversing = changing node order [OK]
      Hint: Reversing flips the list order, not deleting or sorting [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 TypeScript code snippets correctly swaps the next and prev pointers of a node in a doubly linked list?
      easy
      A. let temp = node.next; node.next = node.prev; node.prev = temp;
      B. node.next = node.next; node.prev = node.prev;
      C. node.prev = node.next; node.next = node.prev;
      D. let temp = node.prev; node.prev = node.next; node.next = temp.next;

      Solution

      1. Step 1: Identify correct swapping logic

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

        let temp = node.next; node.next = node.prev; node.prev = temp; correctly uses a temp variable to swap next and prev. Others either assign incorrectly or lose references.
      3. Final Answer:

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

        Swap pointers using temp variable [OK]
      Hint: Use a temp variable to swap pointers safely [OK]
      Common Mistakes:
      • Assigning pointers without temp causes data loss
      • Mixing up next and prev assignments
      • Using incorrect pointer references
      3. What will be the output of the following TypeScript code that reverses a doubly linked list?
      class Node {
        data: number;
        next: Node | null = null;
        prev: Node | null = null;
        constructor(data: number) { this.data = data; }
      }
      
      function reverse(head: Node | null): Node | null {
        let current = head;
        let temp: Node | null = null;
        while (current !== null) {
          temp = current.prev;
          current.prev = current.next;
          current.next = temp;
          current = current.prev;
        }
        if (temp !== null) {
          head = temp.prev;
        }
        return head;
      }
      
      // Create list: 1 <-> 2 <-> 3
      const n1 = new Node(1);
      const n2 = new Node(2);
      n1.next = n2; n2.prev = n1;
      const n3 = new Node(3);
      n2.next = n3; n3.prev = n2;
      
      const newHead = reverse(n1);
      
      // Print reversed list
      let result = [];
      let node = newHead;
      while (node !== null) {
        result.push(node.data);
        node = node.next;
      }
      console.log(result);
      medium
      A. []
      B. [1, 2, 3]
      C. [3, 2, 1]
      D. [3, 1, 2]

      Solution

      1. Step 1: Trace pointer swaps in the loop

        Each node swaps its next and prev. The loop moves forward using the old next pointer now in prev.
      2. Step 2: Update head to new first node

        After loop, head is updated to last node processed, which is node with data 3.
      3. Final Answer:

        [3, 2, 1] -> Option C
      4. Quick Check:

        Reversed list order = [3, 2, 1] [OK]
      Hint: Reversing swaps pointers and updates head to last node [OK]
      Common Mistakes:
      • Not updating head after reversal
      • Confusing next and prev in loop
      • Printing original list order
      4. Identify the bug in this TypeScript function that attempts to reverse a doubly linked list:
      function reverse(head: Node | null): Node | null {
        let current = head;
        while (current !== null) {
          let temp = current.next;
          current.next = current.prev;
          current.prev = temp;
          current = current.next;
        }
        return head;
      }
      medium
      A. The function should return current instead of head
      B. The pointers next and prev are swapped incorrectly
      C. The loop condition should be current.next !== null
      D. The function does not update the head to the new first node after reversal

      Solution

      1. Step 1: Check pointer swapping logic

        The swapping of next and prev is correct using a temp variable.
      2. Step 2: Verify head update after reversal

        The function returns original head without updating it to the new first node, so the reversed list head is incorrect.
      3. Final Answer:

        The function does not update the head to the new first node after reversal -> Option D
      4. Quick Check:

        Head must update to new first node [OK]
      Hint: Always update head to last processed node after reversal [OK]
      Common Mistakes:
      • Forgetting to update head after reversal
      • Returning old head instead of new head
      • Incorrect loop condition causing infinite loop
      5. Given a doubly linked list with nodes containing integer data, how would you modify the reversal function to also count how many nodes were reversed and return both the new head and the count?
      hard
      A. Modify the function to use an object return type like { head: Node | null, count: number }, increment count inside the loop, and update head after reversal.
      B. Add a global variable to count nodes and return only the new head.
      C. Count nodes before reversal and return the count without changing the function.
      D. Return an array with the reversed list nodes and count without modifying the reversal logic.

      Solution

      1. Step 1: Add a counter variable inside the reversal function

        Initialize a count variable to zero and increment it each time a node is processed in the reversal loop.
      2. Step 2: Return both new head and count

        After reversal, return an object containing the updated head and the count of nodes reversed.
      3. Final Answer:

        Modify the function to use an object return type like { head: Node | null, count: number }, increment count inside the loop, and update head after reversal. -> Option A
      4. Quick Check:

        Return head and count together after reversal [OK]
      Hint: Use an object return type to return multiple values [OK]
      Common Mistakes:
      • Using global variables instead of local counters
      • Not updating head before returning
      • Returning count without reversing
      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