This commit is contained in:
Denis Landa 2025-11-06 17:57:19 +01:00
parent db9350231b
commit 75f2fc12de

View File

@ -3,38 +3,26 @@
#include <string.h>
#include "a_train.h"
/**
* Prida vozen na koniec vlaku.
*/
struct car* add_car(struct car* first, const char* target) {
// vytvorenie noveho vozna
struct car* newcar = calloc(1, sizeof(struct car));
if (newcar == NULL) {
return first; // ak zlyha alokacia, vrat povodny zoznam
return first;
}
strcpy(newcar->value, target);
newcar->next = NULL;
// ak je vlak prazdny
if (first == NULL) {
return newcar;
}
// najdi posledny vozen
struct car* this = first;
while (this->next != NULL) {
this = this->next;
}
// pripoj novy vozen
this->next = newcar;
return first;
}
/**
* Vypise vsetky vozne vo vlaku.
*/
void print_train(struct car* first) {
struct car* this = first;
while (this != NULL) {
@ -42,40 +30,26 @@ void print_train(struct car* first) {
this = this->next;
}
}
/**
* Zrusenie vsetkych voznov vo vlaku.
*/
void cancel_train(struct car* first) {
if (first == NULL) return;
// rekurzivne uvolnenie
cancel_train(first->next);
free(first);
}
/**
* Vyradenie vsetkych voznov, ktorych cielova stanica je target.
*/
struct car* clear_train(struct car* first, const char* target) {
struct car* current = first;
struct car* prev = NULL;
while (current != NULL) {
if (strcmp(current->value, target) == 0) {
// treba zmazat tento vozen
struct car* to_delete = current;
if (prev == NULL) {
// mazeme prvy prvok
first = current->next;
} else {
// mazeme stredny alebo posledny prvok
prev->next = current->next;
}
current = current->next;
free(to_delete);
} else {
// presun dalej
prev = current;
current = current->next;
}