diff --git a/du4/a_train.c b/du4/a_train.c index 0f56a62..6d5e579 100644 --- a/du4/a_train.c +++ b/du4/a_train.c @@ -58,30 +58,32 @@ void cancel_train (struct car* first) { } struct car* clear_train(struct car* first, const char* target) { - if (first == NULL) { - return NULL; - } + struct car* current = first; + struct car* previous = NULL; - struct car* current = first; // текущий вагон - struct car* previous = NULL; // предыдущий вагон + while (current != NULL) { + if (strcmp(current->value, target) == 0) { + struct car* to_delete = current; - while (current !=NULL) { - if (strcmp(current->value, target)==0) { - if (previous==NULL) { - struct car* new_start = current->next; //Сохраняем адрес второго вагона - free(current); - current = new_start; //Двигаем курсор на следующий вагон - first = new_start; //Обновляем начало поезда - continue; + + if (previous == NULL) { + first = current->next; + current = first; + } + else { + previous->next = current->next; + current = previous->next; } - } else { - previous->next = current->next; - free(current); - current = previous->next; - continue; + + free(to_delete); + } + else { + previous = current; + current = current->next; } } - previous = current; - current = current->next; + + return first; } + diff --git a/du4/train.exe b/du4/train.exe index 7b8c3a6..719eff3 100644 Binary files a/du4/train.exe and b/du4/train.exe differ