Przygotowałem fragment kodu z komentarzami i przyjaznymi nazwami zmiennych.
struct element_listy {
int wartosc;
struct element_listy* nastepny;
};
struct lista {
struct element_listy *pierwszy_element;
};
struct lista *utworz_pusta_liste() {
struct lista *l = (struct lista*)malloc(sizeof(struct lista));
l->pierwszy_element = NULL;
return l;
};
void dodaj_element(struct lista* l, int wartosc) {
struct element_listy * nowy_element = (struct element_listy*)malloc(sizeof(struct element_listy));
nowy_element->wartosc = wartosc;
nowy_element->nastepny = NULL;
if (l->pierwszy_element == NULL) {
/* jezeli lista jest pusta */
/* ustawiamy nowy element jako pierwszy element listy */
l->pierwszy_element = nowy_element;
return;
}
/* szukamy ostatniego elementu listy */
struct element_listy *element = l->pierwszy_element;
while (element->nastepny != NULL) {
element = element->nastepny;
}
/* dopisujemy nowy element na koncu listy */
element->nastepny = nowy_element;
}
/* funkcja usuwa element z listy ale nie niszczy tego elementu */
/* funkcja zwraca 0 w przypdku sukcesu i 1 w przypadku bledu */
int usun_element(struct lista* l, struct element_listy *element_do_usuniecia) {
if (l->pierwszy_element == NULL || element_do_usuniecia == NULL) {
/* jezeli lista jest pusta lub przekazemy zly element to konczymy */
return 1;
}
if (l->pierwszy_element == element_do_usuniecia) {
l->pierwszy_element = l->pierwszy_element->nastepny;
/* dla bezpieczenstwa 'odlaczamy' element_do_usuniecia od reszty listy */
element_do_usuniecia->nastepny = NULL;
return 0;
}
/* szukamy poprzedniego elementu na liscie */
struct element_listy *element = l->pierwszy_element;
while (element != NULL) {
if (element->nastepny == element_do_usuniecia) {
/* znalezlismy poprzednik naszego elementu */
/* modyfikujemy go tak, zeby wsazywal na element po elemencie do usuniecia */
element->nastepny = element_do_usuniecia->nastepny;
/* dla bezpieczenstwa 'odlaczamy' element_do_usuniecia od reszty listy */
element_do_usuniecia->nastepny = NULL;
return 0;
}
element = element->nastepny;
}
/* nie znaleziono elementu w liscie */
return 1;
}
Powiedz z czym masz problem to postaram ci się to wyjaśnić