#include <iostream>
// Node structure
struct Node {
int data;
Node* next;
// Constructor
Node(int value) : data(value), next(nullptr) {}
};
// Function to reverse the linked list
Node* reverseLinkedList(Node* head) {
Node* prev = nullptr;
Node* curr = head;
Node* next = nullptr;
while (curr != nullptr) {
next = curr->next; // Store the next node
curr->next = prev; // Reverse the current node's pointer
prev = curr; // Move prev and curr pointers one step forward
curr = next;
}
return prev; // Prev will now point to the new head of the reversed list
}
// Function to print the linked list
void printLinkedList(Node* head) {
while (head != nullptr) {
std::cout << head->data << " ";
head = head->next;
}
std::cout << std::endl;
}
// Main function
int main() {
// Create a sample linked list: 1 -> 2 -> 3 -> 4 -> 5
Node* head = new Node(1);
head->next = new Node(2);
head->next->next = new Node(3);
head->next->next->next = new Node(4);
head->next->next->next->next = new Node(5);
std::cout << "Original linked list: ";
printLinkedList(head);
// Reverse the linked list
head = reverseLinkedList(head);
std::cout << "Reversed linked list: ";
printLinkedList(head);
// Clean up memory
while (head != nullptr) {
Node* temp = head;
head = head->next;
delete temp;
}
return 0;
}