Reverse Linked List

#include <iostream>

struct ListNode {
    int val;
    ListNode* next;
    ListNode(int x) : val(x), next(nullptr) {}
};

ListNode reverseList(ListNode head) {
    ListNode* prev = nullptr;
    ListNode* current = head;
    ListNode* next = nullptr;

    while (current != nullptr) {
        next = current->next;
        current->next = prev;
        prev = current;
        current = next;
    }

    return prev;
}

int main() {
    // Example usage:
    ListNode* head = new ListNode(1);
    head->next = new ListNode(2);
    head->next->next = new ListNode(3);
    head->next->next->next = new ListNode(4);

    std::cout << "Original List: 1 -> 2 -> 3 -> 4\n";

    head = reverseList(head);

    std::cout << "Reversed List: ";
    while (head != nullptr) {
        std::cout << head->val << " ";
        head = head->next;
    }

    return 0;
}