Bird
Raised Fist0
DSA Javascriptprogramming~10 mins

Reverse a Singly Linked List Recursive in DSA Javascript - Interactive Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to return the base case node in the recursive reverse function.

DSA Javascript
if (head === null || head.next === null) {
  return [1];
}
Drag options to blanks, or click blank then click option'
Ahead.prev
Bhead.next
Cnull
Dhead
Attempts:
3 left
💡 Hint
Common Mistakes
Returning head.next causes errors when head.next is null.
Returning null loses the last node reference.
2fill in blank
medium

Complete the code to recursively reverse the rest of the list after the head.

DSA Javascript
const newHead = [1](head.next);
Drag options to blanks, or click blank then click option'
AreverseListRecursive
BreverseList
Creverse
DreverseLinkedList
Attempts:
3 left
💡 Hint
Common Mistakes
Using an undefined function name causes runtime errors.
Calling the function with wrong arguments.
3fill in blank
hard

Fix the error in the code to correctly reverse the link between head and head.next.

DSA Javascript
head.next.next = [1];
Drag options to blanks, or click blank then click option'
Ahead
Bhead.next
Cnull
DnewHead
Attempts:
3 left
💡 Hint
Common Mistakes
Setting head.next.next to head.next causes a cycle.
Setting it to null breaks the chain.
4fill in blank
hard

Fill both blanks to break the old link and return the new head.

DSA Javascript
head.next = [1];
return [2];
Drag options to blanks, or click blank then click option'
Anull
Bhead
CnewHead
Dhead.next
Attempts:
3 left
💡 Hint
Common Mistakes
Not breaking the old link causes cycles.
Returning head instead of newHead returns the wrong node.
5fill in blank
hard

Fill all three blanks to complete the recursive reverse function.

DSA Javascript
function reverseList(head) {
  if (head === null || head.next === null) {
    return [1];
  }
  const newHead = reverseList(head.next);
  head.next.next = [2];
  head.next = [3];
  return newHead;
}
Drag options to blanks, or click blank then click option'
Ahead
Bnull
CnewHead
Dhead.next
Attempts:
3 left
💡 Hint
Common Mistakes
Returning null in base case loses nodes.
Not breaking old link causes cycles.
Incorrectly setting pointers causes runtime errors.

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