fork download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. struct node
  5. {
  6. int val;
  7. string name;
  8. node* nxt;
  9. };
  10.  
  11. node* getnewnode()
  12. {
  13. node* newly = new node();
  14. newly->val = 0;
  15. newly->name = "END";
  16. newly->nxt = NULL;
  17. return newly;
  18. }
  19.  
  20.  
  21. //node *head = NULL;
  22.  
  23. void show(node* head){
  24. node* trav = head;
  25. while(trav)
  26. {
  27. cout << trav->val << " "<<trav->name << endl;
  28. trav = trav->nxt;
  29. }
  30. }
  31.  
  32. void addmiddle(int position,node* head)
  33. {
  34. node* temp = getnewnode();
  35. node *t = head;
  36.  
  37. for(int i=0;i<position-2;i++)
  38. t = t->nxt;
  39.  
  40. temp->nxt = t->nxt;
  41. t->nxt = temp;
  42.  
  43. }
  44.  
  45. void printrev(node* temp)
  46. {
  47. if(temp==NULL)
  48. {
  49. cout << "reverse print"<<endl; return;
  50. }
  51.  
  52. printrev(temp->nxt);
  53. cout << temp->val << " "<<temp->name << endl;
  54. }
  55.  
  56. node* reversebyiter(node* head)
  57. {
  58. node* current=head,*prev=NULL,*next;
  59.  
  60. while(current)
  61. {
  62. next = current->nxt;
  63. current->nxt = prev;
  64. prev = current;
  65. current = next;
  66. }
  67. head = prev;
  68. return head;
  69. }
  70. node* forrest;
  71. node* reversebyrecur(node* head)
  72. {
  73.  
  74. if(head->nxt == NULL)
  75. {
  76. forrest = head;
  77. return head;
  78. }
  79.  
  80. reversebyrecur(head->nxt);
  81. node *temp=head->nxt->nxt;
  82. head->nxt->nxt = head;
  83. head->nxt = NULL;
  84. return forrest;
  85. }
  86.  
  87. int main() {
  88.  
  89. node *head = NULL;
  90.  
  91. bool intheend = 1;
  92. bool inthemiddle = 1;
  93.  
  94. for (int i=0;i<5;i++)
  95. {
  96. node *temp = getnewnode();
  97. cin >> temp->val;
  98. cin >> temp->name;
  99.  
  100.  
  101. //temp->nxt = head;
  102. //head=temp;
  103. if (head == NULL)
  104. {
  105. temp->nxt = head;
  106. head=temp;
  107. }
  108. else
  109. if(intheend == 1)
  110. {
  111. node* t2 = head;
  112. while(t2->nxt)
  113. {
  114. t2 = t2->nxt;
  115. }
  116. t2->nxt = temp;
  117. }
  118.  
  119. }
  120.  
  121. show(head);
  122. addmiddle(3,head);
  123. cout<<"------------------------------------------------"<<endl;
  124. show(head);
  125. cout<<"------------------------------------------------"<<endl;
  126. node* k = head;
  127. printrev(k);
  128. cout<<"------------------------------------------------"<<endl;
  129. show(head);
  130. head = reversebyiter(head);
  131. cout<<"revrsed the linked list-------------------------"<<endl;
  132. show(head);
  133.  
  134. head = reversebyrecur(head);
  135. cout<<"revrsed the linked list 2 by recur--------------"<<endl;
  136. show(head);
  137.  
  138. return 0;
  139. }
Success #stdin #stdout 0s 4524KB
stdin
1 sid 2 siddy 3 siddddyy 4 sssiiiiiidddddyyyy 5 sssssssssiddddyyyyyy
stdout
1 sid
2 siddy
3 siddddyy
4 sssiiiiiidddddyyyy
5 sssssssssiddddyyyyyy
------------------------------------------------
1 sid
2 siddy
0 END
3 siddddyy
4 sssiiiiiidddddyyyy
5 sssssssssiddddyyyyyy
------------------------------------------------
reverse print
5 sssssssssiddddyyyyyy
4 sssiiiiiidddddyyyy
3 siddddyy
0 END
2 siddy
1 sid
------------------------------------------------
1 sid
2 siddy
0 END
3 siddddyy
4 sssiiiiiidddddyyyy
5 sssssssssiddddyyyyyy
revrsed the linked list-------------------------
5 sssssssssiddddyyyyyy
4 sssiiiiiidddddyyyy
3 siddddyy
0 END
2 siddy
1 sid
revrsed the linked list 2 by recur--------------
1 sid
2 siddy
0 END
3 siddddyy
4 sssiiiiiidddddyyyy
5 sssssssssiddddyyyyyy