Сортировка выбором циклического двусвязного списка

Вопрос в перестановке связей в функции для сортировки выбором циклического двусвязного списка Функция:

    void selectionSort(accommodationAndEviction** head)
{
    if ((*head)->next == *head)
        return;

    accommodationAndEviction* p = *head;

    while (p->next != *head)//пробегаемся по всему списку, начиная со второго и заканчивая первым элементом в цикле
    {
        accommodationAndEviction* min = p;//запоминаем каждый круг первый не отсортированный элемент, он будет считаться минимальным
        accommodationAndEviction* tail = (*head)->prev;//указатель на последний элемент
        accommodationAndEviction* r = p->next;//указатель на второй элемент

        while (r != *head)//сравнивать будем тоже начиная со второго
        {
            if (min->numHotelRoom2 > r->numHotelRoom2)//если элемент в текущей голове больше, чем следующий
                min = r;//то минимальным становится данный "следующий"

            r = r->next;
        }
        //условия для вставки в начало

        if ((*head)->numHotelRoom2 >= min->numHotelRoom2)//если это самый первый отсортированный элемент
        {
            min->next = min->prev;
            min->prev = min->next;

            min->next = (*head)->next;
            (*head)->next->prev = min;
            (*head)->next = min;
            min->prev = *head;
            *head = min;

        }
        //вставка в середину
        else
        {
            //
        }
        p = p->next;
    }

}

Как правильно сделать swap связей для вставки в начало и в середину? Например, есть такой список: 4-3-2-5 Минимальная здесь 2 получается. И нужно 2 поставить в начало, а 4 в конец. Я знаю, что в части кода (ниже) у меня ошибка, но как исправить я не понимаю.

min->next = min->prev;
min->prev = min->next;

min->next = (*head)->next;
(*head)->next->prev = min;
(*head)->next = min;
min->prev = *head;
*head = min;

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