Переставить элементы в кольцевом списке в обратном порядке до определённого элемента и после него

Написать функцию, получающую кольцевой односвязный список и осуществляющую создание линейного списка со следующим расположением элементов. При чётном количестве элементов в кольцевом списке (пример 1,2,3,4,5,6) получается список 3,2,1,6,5,4 , а при нечётном - (пример 1,2,3,4,5) получается 2,1,3,5,4 (средний элемент остается на своем месте).

Я сделал часть, которая обрабатывает список с чётным количеством элементов, но у меня не получается обработать список с нечётным. Можете помочь?

UPD: добавил код для чётного числа элементов. В main вызывается reverseInGroupsEven(в параметрах голова и размер "групп", на которые делю элементы)

Node* reverseK(Node** current, int k) {

Node* prev = NULL;
int count = 0;

while ((*current) && (count++ < k))
{
    Node* next = (*current)->next;

    (*current)->next = prev;

    prev = *current;

    *current = next;
}

return prev;

}

void reverseInGroupsEven(Node **head, int k) {

if (*head == NULL)
    return;

Node* current = *head;

Node* prev = reverseK(&current, k);

reverseInGroupsEven(&current, k);

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

}


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

Автор решения: gregory_isv

Я разобрался, вот код для нечётного числа элементов:

void reverseInGroupsOdd(Node **head, int k){
if (*head == NULL)
    return;
Node* current = *head;

Node* prev1 = reverseK(&current, k);

Node* prev2=current;
current=current->next;

prev2->next = reverseK(&current, k);

(*head)->next = prev2;
*head = prev1;}
→ Ссылка