Io la implementerei in modo diverso, visto che esistono tanti esempi online che potresti copiare, ti posto anche questo
codice:
List *DeletebyName(List *first, char a[100]){
List *tmp, *first1=first;
if (first!=NULL){
// Caso primo nodo da eliminare perdo riferimento a inizio lista che viene elinato
if (strcmp(a, first1->name)==0){
tmp=first1;// salvo il puntatore al nodo da cancellare
first1=first1->n; // scorro la lista, se è l'ultimo nodo first diviene null
first=first1; // prino nodo della lista da restituire
free(tmp);
return (first);
}
while(first1!=NULL){
if (strcmp(a, first1->name)==0){
tmp=first1;// salvo il puntatore al nodo da cancellare
first1=first1->n; // scorro la lista, se è l'ultimo nodo first diviene null
free(tmp);
return (first);
}
else{
first1=first1->n;
}
}
}
else{
return 0;
}
return (first);
}