Advertisement
Eduardo__

Untitled

Nov 18th, 2017
66
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.41 KB | None | 0 0
  1. std::shared_ptr<ListItem>get_node(int index, std::shared_ptr<ListItem>root) {
  2. if (index < 0)
  3. {
  4. return nullptr;
  5. }
  6. std::shared_ptr<ListItem>gettingNode =root;
  7. for (int i = 0; i < index; i++)
  8. {
  9. gettingNode = gettingNode->next;
  10. }
  11. return gettingNode;
  12. }
  13.  
  14. void swap(int index_a, int index_b, std::shared_ptr<ListItem>& root) {
  15. if(index_b < index_a)
  16. {
  17. int tmp=index_b;
  18. index_b=index_a;
  19. index_a=tmp;
  20. }
  21. std::shared_ptr<ListItem> A = get_node(index_a, root);
  22. std::shared_ptr<ListItem> B = get_node(index_b, root);
  23. std::shared_ptr<ListItem> preA = get_node(index_a - 1, root);
  24. std::shared_ptr<ListItem> preB = get_node(index_b - 1, root);
  25. std::shared_ptr<ListItem>tmp=nullptr;
  26.  
  27. if (root != A && A->next != B)//1st situation
  28. {
  29. tmp = A->next;
  30. A->next = B->next;
  31. B->next = tmp;
  32. tmp = preA->next;
  33. preA->next = preB->next;
  34. preB->next = tmp;
  35. }
  36. else if (root == A)
  37. {
  38. if (root == A && A->next == B)//2dn situation
  39. {
  40. A->next = B->next;
  41. root = B;
  42. B->next = A;
  43. }
  44. else
  45. {
  46. tmp = A->next;
  47. A->next = B->next;
  48. B->next = tmp;
  49. tmp = A;
  50. root = B;
  51. preB->next = A;
  52. }
  53. }
  54. else if (A->next == B)
  55. {
  56. A->next = B->next;
  57. B->next = A;
  58. preA->next = B;
  59. }
  60. }
  61.  
  62. void LinkedList::sort () {
  63. for (int i = 1; this->getSize(); i++) {
  64. int j = i;
  65. while ( j > 0 && this->getItem(j) < this->getItem(j - 1)) {
  66. swap(getItem(j), getItem(j - 1), root);
  67. j = j - 1;
  68. }
  69. }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement