reverseList that takes the head node and returns the new head of the reversed list.Reverse a Singly Linked List Recursive in DSA C++ - Build from Scratch
Node with an int data and a Node* next. Then create nodes with values 10, 20, 30, 40, and 50 linked in that order. Finally, create a Node* called head pointing to the first node.Start by defining the Node structure. Then create each node with the given values and link them by setting the next pointers. Finally, set head to the first node.
reverseList that takes a Node* parameter named head and returns a Node*. This function will reverse the linked list recursively.Write the function declaration with the exact name reverseList, taking Node* head and returning Node*.
reverseList function recursively. If head is nullptr or head->next is nullptr, return head. Otherwise, recursively reverse the rest of the list, then set head->next->next = head and head->next = nullptr. Finally, return the new head.Use the base case to return head if it is nullptr or the last node. Then call reverseList recursively on head->next. After recursion, reverse the link by setting head->next->next = head and break the old link with head->next = nullptr. Return the new head.
reverseList with head and store the result back in head. Then use a while loop to print each node's data followed by ' -> '. After the loop, print 'null' to show the end of the list.Call reverseList(head) and assign it back to head. Then use a while loop to print each node's data followed by ' -> '. After the loop, print 'null'.
Practice
Solution
Step 1: Understand recursion on linked list
Recursion works by solving a smaller part first, here reversing from the next node onward.Step 2: Fix current node's pointer after recursion
After reversing the rest, the current node's next node should point back to current node, then current node points to null.Final Answer:
Reverse the rest of the list first, then fix the current node's next pointer -> Option AQuick Check:
Recursive reversal = Reverse rest first [OK]
- Trying to swap data instead of pointers
- Not setting current node's next to null
- Confusing iterative and recursive methods
Solution
Step 1: Identify base cases for recursion
Base case should handle empty list and single node list, both are already reversed.Step 2: Choose condition covering both cases
Condition 'head == nullptr || head->next == nullptr' returns head for empty or single node list.Final Answer:
if (head == nullptr || head->next == nullptr) return head; -> Option BQuick Check:
Base case = empty or single node [OK]
- Returning nullptr for single node list
- Not handling empty list
- Incorrectly modifying head in base case
Node* reverse(Node* head) {
if (!head || !head->next) return head;
Node* newHead = reverse(head->next);
head->next->next = head;
head->next = nullptr;
return newHead;
}Solution
Step 1: Trace recursion calls
reverse(1) calls reverse(2), which calls reverse(3). reverse(3) returns node 3 as base case.Step 2: Reverse pointers on return
On unwind from reverse(3), in reverse(2): head(2)->next(3)->next = 2 so 3->next=2, then 2->next=nullptr. Then in reverse(1): 2->next=1, 1->next=nullptr.Final Answer:
3 -> 2 -> 1 -> null -> Option DQuick Check:
Reversed list = 3->2->1 [OK]
- Not setting head->next to nullptr causing cycle
- Confusing node values order
- Returning wrong node as new head
Node* reverse(Node* head) {
if (!head || !head->next) return head;
Node* newHead = reverse(head->next);
head->next->next = head;
return newHead;
}Solution
Step 1: Analyze missing pointer update
Function misses setting 'head->next = nullptr', causing cycle in reversed list.Step 2: Fix by setting 'head->next = nullptr'
Adding 'head->next = nullptr;' breaks old link, preventing cycle and correctly terminates list.Final Answer:
Add 'head->next = nullptr;' before returning newHead -> Option CQuick Check:
Break old next link to avoid cycle [OK]
- Forgetting to break old next pointer
- Incorrect base case causing null pointer dereference
- Returning wrong node as new head
Node* reverseCount(Node* head, int &count) {
if (!head || !head->next) {
count++;
return head;
}
Node* newHead = reverseCount(head->next, count);
head->next->next = head;
head->next = nullptr;
count++;
return newHead;
}
What will be the value of count after reversing a list with 4 nodes?Solution
Step 1: Understand counting in base case
When recursion reaches last node, count increments by 1 for that node.Step 2: Count increments on each return step
Each return from recursion increments count by 1 for each node processed, total nodes counted equals list length.Final Answer:
4 -> Option AQuick Check:
Count increments once per node [OK]
- Counting only in base case missing other nodes
- Incrementing count twice per node
- Not passing count by reference
Ready to prove it?
Pass the test and this pattern moves unknown
