fork download
  1. #include <iostream>
  2.  
  3. // Node structure
  4. struct Node {
  5. int data;
  6. Node* next;
  7.  
  8. // Constructor
  9. Node(int value) : data(value), next(nullptr) {}
  10. };
  11.  
  12. // Function to reverse the linked list
  13. Node* reverseLinkedList(Node* head) {
  14. Node* prev = nullptr;
  15. Node* curr = head;
  16. Node* next = nullptr;
  17.  
  18. while (curr != nullptr) {
  19. next = curr->next; // Store the next node
  20. curr->next = prev; // Reverse the current node's pointer
  21. prev = curr; // Move prev and curr pointers one step forward
  22. curr = next;
  23. }
  24.  
  25. return prev; // Prev will now point to the new head of the reversed list
  26. }
  27.  
  28. // Function to print the linked list
  29. void printLinkedList(Node* head) {
  30. while (head != nullptr) {
  31. std::cout << head->data << " ";
  32. head = head->next;
  33. }
  34. std::cout << std::endl;
  35. }
  36.  
  37. // Main function
  38. int main() {
  39. // Create a sample linked list: 1 -> 2 -> 3 -> 4 -> 5
  40. Node* head = new Node(1);
  41. head->next = new Node(2);
  42. head->next->next = new Node(3);
  43. head->next->next->next = new Node(4);
  44. head->next->next->next->next = new Node(5);
  45.  
  46. std::cout << "Original linked list: ";
  47. printLinkedList(head);
  48.  
  49. // Reverse the linked list
  50. head = reverseLinkedList(head);
  51.  
  52. std::cout << "Reversed linked list: ";
  53. printLinkedList(head);
  54.  
  55. // Clean up memory
  56. while (head != nullptr) {
  57. Node* temp = head;
  58. head = head->next;
  59. delete temp;
  60. }
  61.  
  62. return 0;
  63. }
  64.  
Success #stdin #stdout 0.01s 5288KB
stdin
Standard input is empty
stdout
Original linked list: 1 2 3 4 5 
Reversed linked list: 5 4 3 2 1