/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode() : val(0), next(nullptr) {} * ListNode(int x) : val(x), next(nullptr) {} * ListNode(int x, ListNode *next) : val(x), next(next) {} * }; */ class Solution { public: // Reverse the list and return the head of the new list. ListNode* reverse(ListNode* node) { if (!node) { return nullptr; } if (!node->next) { return node; } ListNode* head = reverse(node->next); node->next->next = node; node->next = nullptr; return head; } ListNode* reverseList(ListNode* head) { return reverse(head); } };