Bird
Raised Fist0
DSA Javascriptprogramming~5 mins

Reverse a Singly Linked List Recursive in DSA Javascript - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the base case in the recursive reversal of a singly linked list?
The base case is when the current node is null or the next node is null, meaning we have reached the end of the list or the list is empty.
Click to reveal answer
beginner
In recursive reversal, what does the recursive call return?
It returns the new head of the reversed linked list, which is the last node of the original list.
Click to reveal answer
intermediate
How do you reverse the link between two nodes during recursion?
After the recursive call, set the next node's next pointer to the current node, then set the current node's next pointer to null.
Click to reveal answer
intermediate
Why is recursion a good fit for reversing a singly linked list?
Because it naturally processes nodes from the end back to the start, making it easy to reverse links step-by-step without extra data structures.
Click to reveal answer
beginner
What is the time complexity of reversing a singly linked list recursively?
O(n), where n is the number of nodes, because each node is visited once during the recursion.
Click to reveal answer
What does the recursive function return when reversing a singly linked list?
ANull
BThe original head of the list
CThe last node visited before recursion
DThe new head of the reversed list
What is the base case for the recursive reversal of a singly linked list?
AWhen the list has more than one node
BWhen the current node is null or its next is null
CWhen the current node is the head
DWhen the list is empty
How do you reverse the link between nodes after the recursive call?
ASet next node's next to current node and current node's next to null
BSet current node's next to next node
CSet current node's next to null only
DSet next node's next to null
What is the time complexity of recursive reversal of a singly linked list?
AO(n)
BO(n^2)
CO(log n)
DO(1)
Why is recursion suitable for reversing a singly linked list?
AIt uses extra memory to store nodes
BIt avoids visiting nodes multiple times
CIt processes nodes from end to start naturally
DIt is faster than iteration
Explain step-by-step how recursion reverses a singly linked list.
Think about what happens when recursion reaches the last node and how links are reversed on the way back.
You got /5 concepts.
    Describe the time complexity and why recursive reversal of a singly linked list is O(n).
    Consider how many times the function is called and what work is done per call.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main idea behind reversing a singly linked list using recursion?
      easy
      A. Swap the values of the first and last nodes only
      B. Reverse the rest of the list first, then fix the current node's next pointer
      C. Iterate through the list using a loop and reverse pointers
      D. Create a new list and copy nodes in reverse order

      Solution

      1. Step 1: Understand recursion on linked list

        Recursion reverses the list by first reversing the smaller list after the current node.
      2. Step 2: Fix the current node's next pointer

        After recursion returns, the current node's next node points back to the current node, reversing the link.
      3. Final Answer:

        Reverse the rest of the list first, then fix the current node's next pointer -> Option B
      4. Quick Check:

        Recursive reversal = Reverse rest then fix current [OK]
      Hint: Think: reverse smaller list first, then fix current link [OK]
      Common Mistakes:
      • Trying to swap node values instead of pointers
      • Using iteration instead of recursion
      • Not fixing the current node's next pointer after recursion
      2. Which of the following is the correct base case for a recursive function that reverses a singly linked list?
      easy
      A. if (head === null) return head;
      B. if (head.next.next === null) return head.next;
      C. if (head.next === null) return head;
      D. if (head === null || head.next === null) return head;

      Solution

      1. Step 1: Identify base cases for recursion

        The base case must handle empty list (null) and single node list (next is null).
      2. Step 2: Combine conditions for base case

        Return head if it is null or if it is the last node (head.next is null).
      3. Final Answer:

        if (head === null || head.next === null) return head; -> Option D
      4. Quick Check:

        Base case = empty or single node list [OK]
      Hint: Base case covers empty or single node list [OK]
      Common Mistakes:
      • Using only null check without single node check
      • Returning wrong node in base case
      • Checking head.next.next which may cause error if head.next is null
      3. What will be the output linked list after running this recursive reverse function on the list 1 -> 2 -> 3 -> null?
      function reverseList(head) {
        if (head === null || head.next === null) return head;
        const newHead = reverseList(head.next);
        head.next.next = head;
        head.next = null;
        return newHead;
      }
      medium
      A. 3 -> 1 -> 2 -> null
      B. 1 -> 2 -> 3 -> null
      C. 3 -> 2 -> 1 -> null
      D. 2 -> 3 -> 1 -> null

      Solution

      1. Step 1: Trace recursion on list 1 -> 2 -> 3

        Recursion reaches last node 3, returns it as new head.
      2. Step 2: Reverse pointers on unwind

        Node 2's next (3) points back to 2, then 2's next set to null; similarly for node 1.
      3. Final Answer:

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

        Recursive reversal output = reversed list [OK]
      Hint: Last node becomes new head, pointers reversed on return [OK]
      Common Mistakes:
      • Not setting head.next to null causing cycles
      • Returning original head instead of new head
      • Confusing node values with pointers
      4. Identify the error in this recursive reverse function:
      function reverseList(head) {
        if (!head || !head.next) return head;
        const newHead = reverseList(head.next);
        head.next = head;
        head.next = null;
        return newHead;
      }
      medium
      A. head.next = head; creates a cycle, should be head.next.next = head;
      B. Base case is missing for empty list
      C. Function does not return newHead
      D. head.next is set to null before recursion

      Solution

      1. Step 1: Analyze pointer assignment

        head.next = head sets next pointer of current node to itself, causing cycle.
      2. Step 2: Correct pointer fix

        It should be head.next.next = head to reverse the link properly.
      3. Final Answer:

        head.next = head; creates a cycle, should be head.next.next = head; -> Option A
      4. Quick Check:

        Pointer fix must be head.next.next = head [OK]
      Hint: Fix pointer with head.next.next = head, not head.next = head [OK]
      Common Mistakes:
      • Assigning head.next to head causing infinite loop
      • Forgetting to set head.next to null
      • Incorrect base case handling
      5. Given a singly linked list with nodes containing values [10, 20, 30, 40, 50], how would you modify the recursive reverse function to also count the number of nodes reversed and return it along with the new head?
      hard
      A. Return an object {newHead, count} from recursion and increment count on unwind
      B. Use a global variable to count nodes during recursion
      C. Count nodes before recursion and return only new head
      D. Modify nodes to store count and update during recursion

      Solution

      1. Step 1: Change recursion to return both head and count

        Return an object with newHead and count from each recursive call.
      2. Step 2: Increment count on each unwind step

        When recursion returns, add 1 to count to track nodes reversed.
      3. Final Answer:

        Return an object {newHead, count} from recursion and increment count on unwind -> Option A
      4. Quick Check:

        Return combined result object with count [OK]
      Hint: Return object with head and count, increment count on return [OK]
      Common Mistakes:
      • Using global variables causing side effects
      • Counting nodes before reversal, not during recursion
      • Modifying node structure 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