mam do napisania program listę która będzie dodawać elementy do listy i usuwać z listy i nie wiem czemu mi nie działa usuwanie z listy ani wypisywanie imion i nazwisk wpisanych osób
proszę o pomoc

#include <stdio.h>
#include <string.h>

typedef struct Osoba
{

   char nazwisko[20];
   char imie[20];
   char numer_prawa_jazdy[20];
   char numer_rejestracyjny[20];
   struct Osoba* next;
          } Osoba ;

int dlugosc_listy(Osoba lista)
{
int d = 0;
Osoba
wsk = lista;
while(wsk != NULL)
{
d++;
wsk = wsk->next;
}
return d;
}

void dodaj(Osoba* lista, Osoba nowa)
{
while (lista != NULL) lista = &((lista)->next);
*lista = nowa;
nowa->next = NULL;
}

// dodaje osobe do listy
void dodajOsobe(Osoba* lista)
{ char line[500];
Osoba
nowa = (Osoba*)malloc(sizeof(Osoba));
printf("Podaj imie: ");
scanf("%s", nowa->imie);

 printf("Podaj nazwisko: ");
 scanf("%s", nowa->nazwisko);

 printf("Podaj numer rejestracyjny: " );
 scanf("%s", &(nowa->numer_rejestracyjny));

 printf("Podaj numer prawa jazdy: " );
 scanf("%s", &nowa->numer_prawa_jazdy);

 dodaj(lista, nowa);

}

void wypisz_liste(Osoba* lista)
{

 Osoba* wsk = lista;

 if(lista == NULL)
 printf("LISTA JEST PUSTA");
 else
 printf("Lista zawiera %d elementow: \n", dlugosc_listy(lista) );
 int i = 1;
 while( wsk != NULL)
 {
        printf("%s %s %s %s %s\n", i, wsk->imie, wsk->nazwisko, wsk->numer_rejestracyjny, wsk->numer_prawa_jazdy);
        wsk=wsk->next;
        i++;
 }

}

/*void usun( Osoba* lista, int ID)
{
Osoba
poprzedni = NULL;
Osoba wsk = lista;
int i;
for(i = 1; i < ID; i++)
{
poprzedni=wsk;
wsk=wsk->next;

                 }
         if(poprzedni==NULL)
         {
         (*lista)=(*lista)->next;
         free(wsk);
         }
         else
         {
             poprzedni->next=wsk->next;
             free(wsk);
         }

}
void usun_imnaz(Osoba** lista, char id)
{

      char name[100];
      char lastname[100];
      id='NULL';

       printf("Podaj imie: ");
 scanf("%s", name);

 printf("Podaj nazwisko: ");
 scanf("%s", lastname);

      if(usun_imnaz(name)==id)
        {
            printf("Osoba zostala usunieta");
        }
      else
        {
         printf("Osoba nie zostala usunieta, nie ma takiej osoby");

        }
 }*/

void wypisz_osobe_lista(Osoba lista, int ID)
{
int i;
Osoba
wsk = lista;
for(i = 1; i < ID; i++)
{
wsk=wsk->next;

                 }
         printf("%s %s %s %s %s\n", i, wsk->imie, wsk->nazwisko, wsk->numer_rejestracyjny, wsk->numer_prawa_jazdy);
                                }

int main()
{
Osoba* lista = NULL;

          int option;

while(option != 0)
{
printf("\n\n MENU");
printf("\n\n\n 0 Wyjscie z programu");
printf("\n 1 Wpisz dane osoby do bazy");
printf("\n 2 Wyswietl cala liste\n");
printf("\n 3 usun element z listy\n");
printf("\n 4 usun cala liste\n");

       scanf("%d", &option);

       switch(option)
       {

                     case 1:
                          printf("DODAWANIE OSOBY DO LISTY\n");
                          dodajOsobe(&lista);
                          break;

                     case 2:
                          printf("WYSWIETL CALA LISTE\n");
                          wypisz_liste(&lista);
                          break;

                    /* case 3:
                        printf("USUN LISTE\n");
                        usun_imnaz(lista);
                        break;

                     case 4:
                        printf("USUN LISTE\n");
                        usun(lista);
                        break;
                     }*/
      }

int key;
scanf("%d", &key);

}

}