Сортировка выбором циклического двусвязного списка
Вопрос в перестановке связей в функции для сортировки выбором циклического двусвязного списка Функция:
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;