Проблема с сортировкой

Нужно сортировать список(по убыванию) по значению value (функция Sort), уже несколько дней пытаюсь сделать, все никак не выходит, при подаче значений 1, 2, 3, 4, 5. Получается: 3, 4, 2, 1, 1. Если при сортировке уменьшит до Size - 1(4, в 4 раза меньше прошлого), то ответ будет: 3, 4, 2, 1, 5. Подскажите в чем может быть дело, думаю, быть может, неверно возвращаюсь в начало списка. Можете свой метод предложить, если мой слишком замудренный.

void Students::Sort() { 
    Node* current = this->head; // 1
    Node* next = current->pNext; // 2
    Node* link = this->head; // 1 // Играет роль предыдущего 
    bool check = false;
    int sum = 0;
    int num = 1;
    for (int i = 0; i < (Size - 1) * (Size - 1); i++) { // Используя только Size - 1, будет 2 вариант ответа
        if (sum > 1) {
            link = link->pNext; 
        }
        if (current->volume < next->volume) { // 1, 3, 5, ... разы перестановки(нечетные)
            current->pNext = next->pNext;
            next->pNext = current;
            if (sum < 1) {
                this->head = next; // 
                link = this->head;
            }
            else {
                link->pNext = next;
            }
            check = true;
        }
        if (next->volume < current->volume && check == false) { // 2, 4 ... четные разы
            next->pNext = current->pNext;
            current->pNext = next;
            link->pNext = current;
        }
        check = false;
        current = current->pNext;
        next = next->pNext;
        sum++;
        if (current->pNext == nullptr || next->pNext == nullptr) {
            sum = 0;
            current = this->head;
            next = current->pNext;
        }
    }
}

Ответы (0 шт):