Kod:
void del(Lista* head, int key) {
Lista* tmp = head;
do {
if ( tmp->key == key ) {
tmp->prv = tmp->next;
tmp->next = tmp->prv;
free(tmp);
return;
}
if ( tmp->key != key ) {
printf("\nBlad usuwania elementu. Element o kluczu = %d nie istnieje.!\n\n",key);
return;
}
tmp = tmp->next;
}while ( tmp != head );
}
To była druga funkcja na którą rzuciłem okiem. W pogrubionych 2 linijkach pewnie chcesz zamienić wskaźniki prev i next? Jeżeli tak to teraz je sobie nadpisujesz a druga pogrubiona linijka przypisuje ten sam adres, potrzebna ci jest dodatkowa zmienna na tymczasowy wskaznik.
Dodatkowo w pętli do while masz dwa ify
tmp->key == key oraz
if ( tmp->key != key ) a w każdym z nich masz instrukcję return. Wiec jaki jest cel opakowania tego w funkcję do while skoro nigdy to nie przejdzie dwa razy?
A po polsku?
Dodatkowo gorzej opisac programu niz ty to zrobiles sie chyba nie da. Nawet nie napisałeś co to ma robić po kolei a te komentarze w kodzie to chyba prowokacja xD
I dlaczego stworzyles ta liste jako zmienna globalna a nie zrobiłeś tego w funkcji main, a potem jeszcze z funkcji main przekazujesz ją jako parametr do każdej z funkcji skoro jest ona tam widoczna bez tego?