Функция инвертирования элементов в ЛОС работает с N+1 элемента
Есть такой код на языке си. Однако оно не инвертирует первый элемент никаким образом, как это можно исправить?
// описание сущности "Узел ЛОС"
typedef struct Node
{
int key;
struct Node* next;
} Node;
// вспомогательная сущность, хранящая указатель на начало списка и его размер
typedef struct
{
size_t size;
Node* head;
Node* tail;
} List;
// Инвертирование N элементов
void reverse(List list, int from, int count) {
Node* beforeBegin = NULL;
Node* begin = list.head;
for (int i = 0; i < from; ++i) {
beforeBegin = begin;
begin = begin->next;
}
Node* back = begin;
Node* mid = back->next;
Node* front = mid->next;
for (int i = 0; i < count - 2; ++i) {
mid->next = back;
back = mid;
mid = front;
if (mid != NULL)
front = mid->next;
}
begin->next = mid;
if (beforeBegin == NULL) {
// We reverse from the head
list.head = back;
} else {
beforeBegin->next = back;
}
}
Ответы (1 шт):
Автор решения: DmitryK
→ Ссылка
Потому что вы инвертируете count - 2 элементов. А надо count - 1
for (int i = 0; i < count-2; ++i) // вот здесь должно быть i < count-1
{