#include <iostream>
using namespace std;
// Definition for singly-linked list.
struct ListNode {
int val;
ListNode* next;
ListNode(int x) : val(x), next(nullptr) {}
};
class Solution {
public:
ListNode* reverseList(ListNode* cur, ListNode* prev = nullptr) {
if (cur == nullptr) return prev;
ListNode* nxt = cur->next;
cur->next = prev;
return reverseList(nxt, cur);
}
};
// Helper function to print the linked list
void printList(ListNode* head) {
while (head != nullptr) {
cout << head->val << " -> ";
head = head->next;
}
cout << "NULL" << endl;
}
// Helper function to create a linked list from an array
ListNode* createList(int arr[], int n) {
if (n == 0) return nullptr;
ListNode* head = new ListNode(arr[0]);
ListNode* current = head;
for (int i = 1; i < n; ++i) {
current->next = new ListNode(arr[i]);
current = current->next;
}
return head;
}
int main() {
int arr[] = {1, 2, 3, 4, 5};
int n = sizeof(arr) / sizeof(arr[0]);
// Create the linked list
ListNode* head = createList(arr, n);
cout << "Original list: ";
printList(head);
// Reverse the list
Solution sol;
ListNode* reversed = sol.reverseList(head);
cout << "Reversed list: ";
printList(reversed);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gRGVmaW5pdGlvbiBmb3Igc2luZ2x5LWxpbmtlZCBsaXN0LgpzdHJ1Y3QgTGlzdE5vZGUgewogICAgaW50IHZhbDsKICAgIExpc3ROb2RlKiBuZXh0OwogICAgTGlzdE5vZGUoaW50IHgpIDogdmFsKHgpLCBuZXh0KG51bGxwdHIpIHt9Cn07CgpjbGFzcyBTb2x1dGlvbiB7CnB1YmxpYzoKICAgIExpc3ROb2RlKiByZXZlcnNlTGlzdChMaXN0Tm9kZSogY3VyLCBMaXN0Tm9kZSogcHJldiA9IG51bGxwdHIpIHsKICAgICAgICBpZiAoY3VyID09IG51bGxwdHIpIHJldHVybiBwcmV2OwogICAgICAgIExpc3ROb2RlKiBueHQgPSBjdXItPm5leHQ7CiAgICAgICAgY3VyLT5uZXh0ID0gcHJldjsKICAgICAgICByZXR1cm4gcmV2ZXJzZUxpc3Qobnh0LCBjdXIpOwogICAgfQp9OwoKLy8gSGVscGVyIGZ1bmN0aW9uIHRvIHByaW50IHRoZSBsaW5rZWQgbGlzdAp2b2lkIHByaW50TGlzdChMaXN0Tm9kZSogaGVhZCkgewogICAgd2hpbGUgKGhlYWQgIT0gbnVsbHB0cikgewogICAgICAgIGNvdXQgPDwgaGVhZC0+dmFsIDw8ICIgLT4gIjsKICAgICAgICBoZWFkID0gaGVhZC0+bmV4dDsKICAgIH0KICAgIGNvdXQgPDwgIk5VTEwiIDw8IGVuZGw7Cn0KCi8vIEhlbHBlciBmdW5jdGlvbiB0byBjcmVhdGUgYSBsaW5rZWQgbGlzdCBmcm9tIGFuIGFycmF5Ckxpc3ROb2RlKiBjcmVhdGVMaXN0KGludCBhcnJbXSwgaW50IG4pIHsKICAgIGlmIChuID09IDApIHJldHVybiBudWxscHRyOwogICAgTGlzdE5vZGUqIGhlYWQgPSBuZXcgTGlzdE5vZGUoYXJyWzBdKTsKICAgIExpc3ROb2RlKiBjdXJyZW50ID0gaGVhZDsKICAgIGZvciAoaW50IGkgPSAxOyBpIDwgbjsgKytpKSB7CiAgICAgICAgY3VycmVudC0+bmV4dCA9IG5ldyBMaXN0Tm9kZShhcnJbaV0pOwogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0OwogICAgfQogICAgcmV0dXJuIGhlYWQ7Cn0KCmludCBtYWluKCkgewogICAgaW50IGFycltdID0gezEsIDIsIDMsIDQsIDV9OwogICAgaW50IG4gPSBzaXplb2YoYXJyKSAvIHNpemVvZihhcnJbMF0pOwoKICAgIC8vIENyZWF0ZSB0aGUgbGlua2VkIGxpc3QKICAgIExpc3ROb2RlKiBoZWFkID0gY3JlYXRlTGlzdChhcnIsIG4pOwogICAgCiAgICBjb3V0IDw8ICJPcmlnaW5hbCBsaXN0OiAiOwogICAgcHJpbnRMaXN0KGhlYWQpOwoKICAgIC8vIFJldmVyc2UgdGhlIGxpc3QKICAgIFNvbHV0aW9uIHNvbDsKICAgIExpc3ROb2RlKiByZXZlcnNlZCA9IHNvbC5yZXZlcnNlTGlzdChoZWFkKTsKCiAgICBjb3V0IDw8ICJSZXZlcnNlZCBsaXN0OiAiOwogICAgcHJpbnRMaXN0KHJldmVyc2VkKTsKCiAgICByZXR1cm4gMDsKfQo=