Bird
Raised Fist0
DSA Cprogramming~5 mins

Reverse a Singly Linked List Recursive in DSA C - 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
intermediate
In recursive reversal, what happens after the recursive call returns?
After the recursive call returns, the next node's next pointer is set to the current node, reversing the link between them.
Click to reveal answer
intermediate
Why do we set the current node's next pointer to NULL in recursive reversal?
We set the current node's next pointer to NULL to mark the new end of the reversed list and avoid cycles.
Click to reveal answer
beginner
Show the recursive function signature to reverse a singly linked list in C.
struct Node* reverseRecursive(struct Node* head);
Click to reveal answer
beginner
What is the time complexity of reversing a singly linked list recursively?
The time complexity is O(n), where n is the number of nodes, because each node is visited once.
Click to reveal answer
What does the recursive function return when reversing a singly linked list?
AThe original head of the list
BNULL
CThe last node visited before recursion
DThe new head of the reversed list
In recursive reversal, which pointer is changed to reverse the link?
Anext node's next pointer
Bprevious node's next pointer
Chead pointer
Dcurrent node's next pointer
What is the base case condition in recursive reversal?
Ahead != NULL and head->next != NULL
Bhead == NULL and head->next == NULL
Chead == NULL or head->next == NULL
Dhead->next == NULL only
What happens to the current node's next pointer after reversing the link?
AIt is set to NULL
BIt points to the previous node
CIt remains unchanged
DIt points to the head
What is the space complexity of recursive reversal of a singly linked list?
AO(1) constant space
BO(n) due to recursion stack
CO(log n)
DO(n^2)
Explain step-by-step how recursion reverses a singly linked list.
Think about what happens after the recursive call returns.
You got /5 concepts.
    Write the recursive function in C to reverse a singly linked list and explain each line.
    Focus on how pointers are changed after recursion.
    You got /5 concepts.

      Practice

      (1/5)
      1. What is the main idea behind reversing a singly linked list using recursion?
      easy
      A. Use a stack to store nodes and pop them in reverse order
      B. Reverse the rest of the list and then fix the first node's next pointer
      C. Swap the data values of nodes from start to end
      D. Iterate through the list and reverse pointers one by one

      Solution

      1. Step 1: Understand recursion on linked list

        Recursion reverses the list from the second node onward first.
      2. Step 2: Fix the first node's next pointer

        After recursion returns, the first node's next pointer is set to null and the previous node points back to it.
      3. Final Answer:

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

        Recursive reversal = Reverse rest + fix first [OK]
      Hint: Think: reverse smaller list first, then fix current node [OK]
      Common Mistakes:
      • Trying to swap node data instead of pointers
      • Not setting the first node's next to null
      • Confusing iterative and recursive methods
      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 NULL;
      B. if (head->next == NULL) return head;
      C. if (head == NULL || head->next == NULL) return head;
      D. if (head->next == NULL) head = NULL;

      Solution

      1. Step 1: Identify base cases for recursion

        Base case must handle empty list and single node list to stop recursion.
      2. Step 2: Choose correct condition

        Condition 'head == NULL || head->next == NULL' covers both empty and single node cases.
      3. Final Answer:

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

        Base case = empty or single node [OK]
      Hint: Base case stops recursion on empty or single node [OK]
      Common Mistakes:
      • Returning NULL for single node list
      • Not handling empty list as base case
      • Incorrectly modifying head in base case
      3. What will be the output linked list after reversing recursively the list: 1 -> 2 -> 3 -> NULL?
      medium
      A. 3 -> 1 -> 2 -> NULL
      B. 1 -> 2 -> 3 -> NULL
      C. 2 -> 3 -> 1 -> NULL
      D. 3 -> 2 -> 1 -> NULL

      Solution

      1. Step 1: Trace recursive reversal

        Recursion reverses from last node back: 3 becomes new head, 2 points to 1, 1 points to NULL.
      2. Step 2: Confirm final list order

        Final reversed list is 3 -> 2 -> 1 -> NULL.
      3. Final Answer:

        3 -> 2 -> 1 -> NULL -> Option D
      4. Quick Check:

        Reverse(1->2->3) = 3->2->1 [OK]
      Hint: Last node becomes new head after recursion [OK]
      Common Mistakes:
      • Assuming original order remains
      • Mixing node values instead of pointers
      • Forgetting to set last node's next to NULL
      4. Identify the error in this recursive reverse function snippet:
      Node* reverse(Node* head) {
        if (head == NULL || head->next == NULL) return head;
        Node* rest = reverse(head->next);
        head->next->next = head;
        head->next = head;
        return rest;
      }
      medium
      A. head->next is set to head instead of NULL causing a cycle
      B. Missing base case for empty list
      C. Incorrect return value; should return head
      D. No recursive call made

      Solution

      1. Step 1: Analyze pointer assignments

        head->next->next = head correctly points next node back to current node.
      2. Step 2: Identify incorrect pointer reset

        head->next = head wrongly points current node's next to itself, causing a cycle instead of NULL.
      3. Final Answer:

        head->next is set to head instead of NULL causing a cycle -> Option A
      4. Quick Check:

        head->next must be NULL, not head [OK]
      Hint: Set head->next to NULL to avoid cycles [OK]
      Common Mistakes:
      • Setting head->next to head causing infinite loop
      • Forgetting to return the new head
      • Not handling base case properly
      5. Given a singly linked list with nodes containing values 10 -> 20 -> 30 -> 40 -> NULL, what will be the printed output after applying this recursive reverse function?
      Node* reverse(Node* head) {
        if (!head || !head->next) return head;
        Node* rest = reverse(head->next);
        head->next->next = head;
        head->next = NULL;
        return rest;
      }
      
      void printList(Node* head) {
        while (head) {
          printf("%d -> ", head->data);
          head = head->next;
        }
        printf("NULL\n");
      }
      
      int main() {
        // List creation omitted for brevity
        Node* reversed = reverse(head);
        printList(reversed);
      }
      hard
      A. 40 -> 30 -> 20 -> 10 -> NULL
      B. 10 -> 20 -> 30 -> 40 -> NULL
      C. NULL
      D. 40 -> 20 -> 30 -> 10 -> NULL

      Solution

      1. Step 1: Trace recursive reversal on list 10->20->30->40

        Recursion reverses from last node: 40 becomes new head, pointers reversed stepwise.
      2. Step 2: Confirm print output

        Print function outputs nodes in order: 40 -> 30 -> 20 -> 10 -> NULL.
      3. Final Answer:

        40 -> 30 -> 20 -> 10 -> NULL -> Option A
      4. Quick Check:

        Reverse(10->20->30->40) = 40->30->20->10 [OK]
      Hint: Last node becomes head; print from new head [OK]
      Common Mistakes:
      • Assuming original order remains after reverse
      • Forgetting to set last node's next to NULL
      • Confusing print output with input list
      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