fork download
  1. #include <bits/stdc++.h>
  2. #include <string>
  3. using namespace std;
  4.  
  5.  
  6. //ifstream f("data2.in");
  7. //0 means not reversed
  8. //1 means reversed
  9. int reverseflag = 0;
  10.  
  11. struct node{
  12. int number;
  13. node *next;
  14. };
  15.  
  16. node *initNode(int number)
  17. {
  18. node *head = new node;
  19. head->next = NULL;
  20. head->number = number;
  21. return head;
  22. }
  23. void InsertFront(node *head, int number)
  24. {
  25. node *cur = head;
  26. node *tmp = new node;
  27. cur = cur->next;
  28. head->next = tmp;
  29. tmp->next = cur;
  30. tmp->number = number;
  31. }
  32.  
  33. void InsertBack(int number, node *head)
  34. {
  35. node *cur = head;
  36. node *last = new node;
  37. if(cur!=0)
  38. {
  39. while(cur->next!=NULL)
  40. {
  41. cur = cur->next;
  42. }
  43. cur->next = last;
  44. last->next = NULL;
  45. last->number = number;
  46. }
  47. }
  48.  
  49. void PrintLinkedList(node *head)
  50. {
  51. if(head)
  52. {
  53. node *cur = head;
  54. while(cur != NULL)
  55. {
  56. cout << cur->number << " ";
  57. cur=cur->next;
  58. }
  59. cout << endl;
  60. }
  61. else
  62. cout << "List is empty ..." << endl;
  63. }
  64.  
  65. bool RemoveFront(node *head, int &a)
  66. {
  67. if(head->next==NULL && head->number==-1)
  68. {
  69. cout << "No job for Ada?" << endl;
  70. return false;
  71. }
  72. else
  73. {
  74. node *tmp = head->next;
  75. a = tmp->number;
  76. node *cur = tmp->next;
  77. head->next = cur;
  78. free(tmp);
  79. return true;
  80. }
  81. }
  82.  
  83. bool RemoveBack(node *head, int &a)
  84. {
  85. node *temp;
  86. node *cur = head;
  87. if(head->next == NULL && head->number == -1)
  88. {
  89. cout << "No job for Ada?" << endl;
  90. return false;
  91. }
  92. else
  93. {
  94. if(cur != 0)
  95. {
  96. //find last
  97. while(cur->next != NULL)
  98. {
  99. temp = cur;
  100. cur = cur->next;
  101. }
  102. a = cur->number;
  103. temp->next = 0;
  104. free(cur);
  105. }
  106. return true;
  107. }
  108. }
  109.  
  110. void ReverseList()
  111. {
  112. if(reverseflag==1)
  113. reverseflag = 0;
  114. else
  115. reverseflag = 1;
  116. }
  117.  
  118.  
  119. int main ()
  120. {
  121. //TODO test all input data
  122. int num=-1;
  123. int Qnums=0;
  124. //keep track of node with number -1 -> it cannot be deleted !!!!
  125. node *n = initNode(-1);
  126. int a = 0;
  127. string command="";
  128.  
  129. cin>>Qnums;
  130. //f>>Qnums;
  131. while(Qnums)
  132. {
  133. cin>>command;
  134. cin>>num;
  135. if(cin.fail()){
  136. cin.clear();
  137. }
  138. if(command=="push_back")
  139. {
  140. if(reverseflag==0)
  141. {
  142. InsertBack(num, n);
  143. }
  144. else
  145. {
  146. InsertFront(n, num);
  147. }
  148. }
  149. else if(command == "back")
  150. {
  151. if(reverseflag==0)
  152. {
  153. bool flag = RemoveBack(n, a);
  154. if(flag)
  155. cout << a << endl;
  156. }
  157. else
  158. {
  159. bool flag = RemoveFront(n, a);
  160. if(flag)
  161. cout << a << endl;
  162. }
  163.  
  164. }
  165. else if(command == "toFront")
  166. {
  167. if(reverseflag==0)
  168. {
  169. InsertFront(n,num);
  170. }
  171. else
  172. {
  173. InsertBack(num, n);
  174. }
  175.  
  176. }
  177. else if(command == "front")
  178. {
  179. if(reverseflag==0)
  180. {
  181. bool flag = RemoveFront(n, a);
  182. if(flag)
  183. cout << a << endl;
  184. }
  185. else
  186. {
  187. bool flag = RemoveBack(n, a);
  188. if(flag)
  189. cout << a << endl;
  190. }
  191.  
  192. }
  193. else if(command == "reverse")
  194. {
  195. ReverseList();
  196. }
  197. else
  198. {
  199. }
  200. Qnums--;
  201. }
  202. return 0;
  203. }
  204.  
Success #stdin #stdout 0s 2880KB
stdin
15
toFront 93
front
back
reverse
back
reverse
toFront 80
push_back 53
push_back 50
front
front
reverse
push_back 66
reverse
front
stdout
93
No job for Ada?
No job for Ada?
80
53
66