Advertisement
rsudhanshu137

Untitled

Feb 12th, 2021
376
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.19 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. #define ll long long int
  4. #define mod 1000000007
  5.  
  6. struct Node
  7. {
  8. int data;
  9. struct Node *link;
  10. };
  11. Node *head = 0;
  12. void ins(int data, int pos)
  13. {
  14. Node *ptr = new Node();
  15. ptr->data = data;
  16. ptr->link = 0;
  17.  
  18. if (pos == 1)
  19. {
  20. ptr->link = head;
  21. head = ptr;
  22. return;
  23. }
  24.  
  25. Node *temp = new Node();
  26. temp = head;
  27. for (int i = 1; i < pos - 1; i++)
  28. {
  29. temp = temp->link;
  30. }
  31.  
  32. ptr->link = temp->link;
  33. temp->link = ptr;
  34. return;
  35.  
  36. }
  37.  
  38. void del(int pos)
  39. {
  40. Node *temp = head;
  41.  
  42. if (pos == 1)
  43. {
  44. head = temp->link;
  45. free(temp);
  46. return;
  47. }
  48.  
  49. for (int i = 1; i < pos - 1; i++)
  50. {
  51. temp = temp->link;
  52. }
  53.  
  54. Node *temp1 = temp->link;
  55. temp->link = temp1->link;
  56. free(temp1);
  57. return;
  58.  
  59. }
  60.  
  61. int len(Node *temp)
  62. {
  63. if (temp == 0)
  64. {
  65. return 0;
  66. }
  67.  
  68. return len(temp->link) + 1;
  69. }
  70.  
  71. bool find(int val, Node *temp)
  72. {
  73. if (temp == 0)
  74. {
  75. return false;
  76. }
  77. if (temp->data == val)
  78. {
  79. return true;
  80. }
  81.  
  82. if (find(val, temp->link) == true)
  83. {
  84. return true;
  85. }
  86. else
  87. {
  88. return false;
  89. }
  90. }
  91.  
  92. void ror(int k, int sz)
  93. {
  94. Node *ptr = head;
  95. // cout << ptr;
  96. if (k < 0 || ptr == 0)
  97. {
  98. return;
  99. }
  100.  
  101. k = k % sz;
  102. if (k == 0)
  103. {
  104. return;
  105. }
  106. Node *temp = head;
  107. int i = 1;
  108. while (i < (sz - k))
  109. {
  110. // cout << temp->data << " ";
  111. temp = temp->link;
  112. i++;
  113. }
  114.  
  115. Node *temp1 = temp->link;
  116. head = temp1;
  117. temp->link = 0;
  118. // cout << temp->data;
  119.  
  120. while (temp1->link != 0)
  121. {
  122. // cout << "hi" << " ";
  123. temp1 = temp1->link;
  124.  
  125. }
  126. temp1->link = ptr;
  127.  
  128. return;
  129. }
  130.  
  131. void rol(int k, int sz)
  132. {
  133. Node *ptr = head;
  134. if (k < 0 || ptr == 0)
  135. {
  136. return;
  137. }
  138.  
  139. k = k % sz;
  140.  
  141. if (k == 0)
  142. {
  143. return;
  144. }
  145.  
  146. Node *temp = head;
  147. int i = 1;
  148.  
  149. while (i < k)
  150. {
  151. temp = temp->link;
  152. i++;
  153. }
  154.  
  155. Node *temp1 = temp->link;
  156. head = temp1;
  157. temp->link = 0;
  158.  
  159. while (temp1->link != 0)
  160. {
  161. temp1 = temp1->link;
  162. }
  163. temp1->link = ptr;
  164. return;
  165. }
  166.  
  167. void reverse()
  168. {
  169.  
  170. Node *prev = 0, *next = head->link, *cur = head;
  171.  
  172. while (cur != 0)
  173. {
  174. cur->link = prev;
  175. prev = cur;
  176. cur = next;
  177.  
  178. if (next)
  179. {
  180. next = next->link;
  181. }
  182.  
  183. }
  184. head = prev;
  185.  
  186. }
  187.  
  188. Node* getmid(Node *temp)
  189. {
  190. if (temp == 0)
  191. {
  192. return temp;
  193. }
  194.  
  195. Node *a = temp;
  196. Node *b = temp;
  197.  
  198. while (b->link != 0)
  199. {
  200. b = b->link;
  201. a = a->link;
  202. if (b->link != 0)
  203. {
  204. b = b->link;
  205. }
  206. else
  207. {
  208. break;
  209. }
  210. }
  211.  
  212. return a;
  213. }
  214.  
  215. Node* merge(Node *left, Node *right)
  216. {
  217. Node *res = 0;
  218.  
  219. if (left == 0)
  220. {
  221. return right;
  222. }
  223.  
  224. if (right == 0)
  225. {
  226. return left;
  227. }
  228.  
  229. if ((left->data) < (right->data))
  230. {
  231. res = left;
  232. res->link = merge(left->link, right);
  233. }
  234. else
  235. {
  236. res = right;
  237. res->link = merge(left, right->link);
  238. }
  239.  
  240. return res;
  241. }
  242.  
  243. Node* mergesort(Node *temp)
  244. {
  245. if (temp == 0 || temp->link == 0)
  246. {
  247. return temp;
  248. }
  249.  
  250. Node *mid = getmid(temp);
  251. Node *nextofmid = mid->link;
  252. mid->link = 0;
  253.  
  254. Node *left = mergesort(temp);
  255. Node *right = mergesort(nextofmid);
  256.  
  257. Node *sortedlist = merge(left, right);
  258. return sortedlist;
  259.  
  260. }
  261.  
  262. void swap(int a, int b)
  263. {
  264. Node *temp = head;
  265. Node *prev = 0;
  266.  
  267. while (temp != 0 && prev->data != a)
  268. {
  269. prev = temp;
  270. temp = temp->link;
  271. }
  272. Node *px = temp;
  273. Node *prevx = prev;
  274.  
  275. temp = head;
  276. prev = 0;
  277.  
  278. while (temp != 0 && prev->data != b)
  279. {
  280. prev = temp;
  281. temp = temp->link;
  282. }
  283.  
  284. Node *py = temp;
  285. Node *prevy = prev;
  286.  
  287. Node *ptr;
  288.  
  289. ptr = py->link;
  290. py->link = px->link;
  291. px->link = ptr;
  292.  
  293. if (prevx == 0)
  294. {
  295. head = py;
  296. prevy->link = px;
  297. }
  298.  
  299. if (prevy == 0)
  300. {
  301. head = px;
  302. prevx->link = py;
  303. }
  304.  
  305. if (prevx != 0 && prevy != 0)
  306. {
  307. prevx->link = py;
  308. prevy->link = px;
  309. }
  310. }
  311.  
  312. void display()
  313. {
  314. Node *t = head;
  315.  
  316. while (t != 0)
  317. {
  318. cout << t->data << " ";
  319. t = t->link;
  320. }
  321. }
  322.  
  323. int main()
  324. {
  325. ios_base::sync_with_stdio(0);
  326. cin.tie(0);
  327.  
  328. ins(891, 1);
  329. ins(223, 2);
  330. ins(73211, 3);
  331. ins(4, 4);
  332. ins(5, 5);
  333. ins(7, 6);
  334.  
  335. // del(3);
  336.  
  337. // int sz = len(head);
  338.  
  339. // cout << find(3, head);
  340. // int k = 1; //unit to shift
  341.  
  342. // ror(k, sz);
  343.  
  344. // rol(1, sz);
  345.  
  346. // reverse();
  347.  
  348. // getmid(head);
  349.  
  350. mergesort(head);
  351.  
  352. display();
  353.  
  354. }
  355.  
  356.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement