Функция инвертирования элементов в ЛОС работает с 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
{
→ Ссылка