fork download
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct Node
  6. {
  7. int val ;
  8. Node* next ;
  9. };
  10.  
  11. class LinkedList
  12. {
  13. Node* head ;
  14. int sz ;
  15.  
  16. public:
  17. LinkedList()
  18. {
  19. head = NULL ;
  20. sz = 0 ;
  21. }
  22.  
  23. bool isEmpty()
  24. {
  25. if(head == NULL) return true ;
  26. return false ;
  27. }
  28.  
  29. void addLast(int value)
  30. {
  31. if(head == NULL)
  32. {
  33. Node* node = new Node() ;
  34. node->val = value ;
  35. node->next = NULL ;
  36. head = node ;
  37. return ;
  38. }
  39. Node* curr = head ;
  40. while(curr->next != NULL)
  41. {
  42. curr = curr->next ;
  43. }
  44. Node* lastNode = new Node() ;
  45. lastNode->val = value ;
  46. curr->next = lastNode ;
  47. lastNode->next = NULL ;
  48. sz++ ;
  49. }
  50. void print()
  51. {
  52. Node* curr = head ;
  53. while(curr != NULL)
  54. {
  55. cout << curr->val << ' ' ;
  56. curr = curr->next ;
  57. }
  58. cout << endl;
  59. }
  60.  
  61. void addFirst(int value)
  62. {
  63.  
  64. Node* newnode = new Node() ;
  65. newnode->val = value ;
  66. newnode->next = head ;
  67. head = newnode ;
  68. sz++ ;
  69. }
  70.  
  71. void addMid(int value, int pos)
  72. {
  73. if(head == NULL)
  74. {
  75. addFirst(value) ;
  76. return ;
  77. }
  78. if(pos == 1 || pos == 0)
  79. {
  80. addFirst(value) ;
  81. return ;
  82. }
  83. if(pos == sz)
  84. {
  85. addLast(value);
  86. return ;
  87. }
  88. sz++ ;
  89. Node* curr = head ;
  90. Node * after = head ;
  91. for(int i = 1 ; i < pos - 1 ; ++i)
  92. {
  93. curr = curr->next ;
  94. after = after->next ;
  95. }
  96. after = curr->next ;
  97. Node* newnode = new Node() ;
  98. newnode->val = value ;
  99. newnode->next = after ;
  100. curr->next = newnode ;
  101. }
  102.  
  103. int getSz()
  104. {
  105. return this->sz;
  106. }
  107.  
  108. void dLast()
  109. {
  110.  
  111. Node* curr = head ;
  112. Node* after = head ;
  113. after = after->next ;
  114. while(after->next != NULL)
  115. {
  116. curr = curr->next ;
  117. after = after->next ;
  118. }
  119. delete after ;
  120. curr->next = NULL ;
  121. sz-- ;
  122. }
  123.  
  124. void dFirst()
  125. {
  126. if(head == NULL)
  127. {
  128. cout << "The list is empty" << endl;
  129. return ;
  130. }
  131. Node* curr = head;
  132. curr = curr->next ;
  133. delete head ;
  134. head = curr ;
  135. sz-- ;
  136. }
  137.  
  138. void dMid(int pos)
  139. {
  140. if(pos == 1)
  141. {
  142. dFirst() ;
  143. return ;
  144. }
  145. if(head == NULL)
  146. {
  147. cout << "The list is empty" << endl;
  148. return ;
  149. }
  150. if(pos == sz)
  151. {
  152. dLast() ;
  153. return ;
  154. }
  155. Node* curr = head ;
  156. Node* mid = head ;
  157. Node* after = head ;
  158. mid = mid->next ;
  159. after = after->next->next ;
  160.  
  161. for(int i = 1 ; i < pos - 1 ; ++i){
  162. curr = curr->next ;
  163. mid = mid->next ;
  164. after = after->next ;
  165. }
  166. delete mid ;
  167. curr->next = after ;
  168. sz-- ;
  169. }
  170. };
  171.  
  172. int main() // 1 50 70 5 10
  173. {
  174. LinkedList l ;
  175. l.addFirst(70) ;
  176. l.addLast(5) ;
  177. l.print() ;
  178. l.addLast(10) ;
  179.  
  180. l.addFirst(50) ;
  181. l.addFirst(1) ;
  182. l.print() ;
  183.  
  184.  
  185. l.addMid(200,3);
  186. l.addMid(200,1);
  187. cout << l.getSz() << endl;
  188.  
  189. l.print() ;
  190.  
  191. l.dFirst() ;
  192. l.print() ;
  193.  
  194. l.dLast() ;
  195. l.print() ;
  196.  
  197. l.dMid(3) ;
  198. l.print() ;
  199.  
  200. l.dMid(1) ;
  201. l.print() ;
  202.  
  203. cout << l.getSz() << endl;
  204.  
  205. l.dMid(3) ;
  206. l.print() ;
  207.  
  208.  
  209. }
  210.  
Success #stdin #stdout 0s 5296KB
stdin
Standard input is empty
stdout
70 5 
1 50 70 5 10 
7
200 1 50 200 70 5 10 
1 50 200 70 5 10 
1 50 200 70 5 
1 50 70 5 
50 70 5 
3
50 70