fork download
  1. // reversing a linked list using recursion method
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. struct Node {
  6. int data;
  7. struct Node* next;
  8. Node(int data)
  9. {
  10. this->data = data;
  11. next = NULL;
  12. }
  13. };
  14. struct LinkedList {
  15. Node* head;
  16. LinkedList() { head = NULL; }
  17.  
  18. Node* reverse(Node* head)
  19. {
  20. if (head == NULL || head->next == NULL)
  21. return head;
  22.  
  23. Node* rest = reverse(head->next);
  24. head->next->next = head;
  25.  
  26. head->next = NULL;
  27. return rest;
  28. }
  29.  
  30. void print()
  31. {
  32. struct Node* temp = head;
  33. while (temp != NULL) {
  34. cout << temp->data << " ";
  35. temp = temp->next;
  36. }
  37. }
  38.  
  39. void push(int data)
  40. {
  41. Node* temp = new Node(data);
  42. temp->next = head;
  43. head = temp;
  44. }
  45. };
  46.  
  47. int main()
  48. {
  49. LinkedList wave;
  50. wave.push(1);
  51. wave.push(2);
  52. wave.push(3);
  53. wave.push(4);
  54. wave.push(5);
  55. wave.push(6);
  56. wave.push(7);
  57. wave.push(8);
  58.  
  59. cout << "Given linked list is:\n";
  60. wave.print();
  61.  
  62. wave.head = wave.reverse(wave.head);
  63.  
  64. cout << "\nReversed linked list is: \n";
  65. wave.print();
  66. return 0;
  67. }
  68.  
Success #stdin #stdout 0.01s 5268KB
stdin
Standard input is empty
stdout
Given linked list is:
8 7 6 5 4 3 2 1 
Reversed linked list is: 
1 2 3 4 5 6 7 8