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