Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- std::shared_ptr<ListItem>get_node(int index, std::shared_ptr<ListItem>root) {
- if (index < 0)
- {
- return nullptr;
- }
- std::shared_ptr<ListItem>gettingNode =root;
- for (int i = 0; i < index; i++)
- {
- gettingNode = gettingNode->next;
- }
- return gettingNode;
- }
- void swap(int index_a, int index_b, std::shared_ptr<ListItem>& root) {
- if(index_b < index_a)
- {
- int tmp=index_b;
- index_b=index_a;
- index_a=tmp;
- }
- std::shared_ptr<ListItem> A = get_node(index_a, root);
- std::shared_ptr<ListItem> B = get_node(index_b, root);
- std::shared_ptr<ListItem> preA = get_node(index_a - 1, root);
- std::shared_ptr<ListItem> preB = get_node(index_b - 1, root);
- std::shared_ptr<ListItem>tmp=nullptr;
- if (root != A && A->next != B)//1st situation
- {
- tmp = A->next;
- A->next = B->next;
- B->next = tmp;
- tmp = preA->next;
- preA->next = preB->next;
- preB->next = tmp;
- }
- else if (root == A)
- {
- if (root == A && A->next == B)//2dn situation
- {
- A->next = B->next;
- root = B;
- B->next = A;
- }
- else
- {
- tmp = A->next;
- A->next = B->next;
- B->next = tmp;
- tmp = A;
- root = B;
- preB->next = A;
- }
- }
- else if (A->next == B)
- {
- A->next = B->next;
- B->next = A;
- preA->next = B;
- }
- }
- void LinkedList::sort () {
- for (int i = 1; this->getSize(); i++) {
- int j = i;
- while ( j > 0 && this->getItem(j) < this->getItem(j - 1)) {
- swap(getItem(j), getItem(j - 1), root);
- j = j - 1;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement