Сортировка вставками линейного односвязного списка

Это структура

struct Node{
    long int field;
    char* ctr;
    struct Node* next;
};

struct List{
    struct Node* main;
    int size;
};

на вход подаются итераторы, указывающие на начало и на конец. итератор next - указывает на следующую ноду. Это сама сортировка:

void sort(ListIterator begin, ListIterator end){
    if(begin){
        struct Node* current = begin->next;
        begin->next = NULL;
        while (current){
            if (current->field < begin->field){
                struct Node* tmp = current;
                current = next(current);
                tmp->next = begin;
                begin = tmp;
            }
            else{
                struct Node* first = begin;
                while (first->next && !(current->field < first->next->field)){
                    first = next(first);
                }
                struct Node* tmp = current;
                current = current->next;
                tmp->next = first->next;
                first->next = tmp;
            }
        }
    }
    else{
        printf("empty \n");
    }
} 

не работает, когда в списке всего два элемента. помогите, пожалуйста


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