Beh, le cose si fanno un pelino piu' complesse ... per fare le cose corrette ho modificato la tua funzione cerca (che, tra l'altro, non funzionava correttamente nel caso di lista vuota ...). La nuova versione cerca l'ho usata anche nella elimina.
La cerca restituisce il puntatore al nodo cercato (se trovato, altrimenti NULL) e restituisce anche il puntatore al nodo precedente (se il nodo trovato e' quello iniziale, il precedente e' NULL). Per restituire un puntatore tramite un parametro, deve essere passato un puntatore a puntatore (ecco il perche' del ** nell'ultimo parametro della cerca).
Queste informazioni sono utili alla funzione elimina per ricostruire correttamente la lista, *senza dimenticare* che la memoria allocata con la malloc, deve essere liberata con la free quando il nodo viene eliminato.
Ovviamente ho adattato il main ...
Naturalmente avrai qualche problemino ad afferrare tutto immediatamente, ma studia il codice con calma e vedrai che ti sara' chiaro ...
Codice PHP:
lista *cerca(int codice, lista **prec)
{
lista *corr = testa;
*prec = NULL;
while(corr)
{
if(corr->codice==codice) break;
*prec=corr;
corr=corr->next;
}
return(corr);
}
void elimina(int codice)
{
lista *prec, *el = cerca(codice, &prec);
if(el)
{
if(!prec)
testa=el->next;
else
prec->next=el->next;
free(el);
}
}
int main(void)
{
int num;
char data[50];
printf("\n> Liste - - -\n");
printf("codice > ");
scanf("%d", &num);
printf("\ttesto >");
scanf("%s", data);
while(num){
aggiungiElemento(num, data);
printf("\ncodice > ");
scanf("%d", &num);
printf("\ttesto >");
scanf("%s", data);
}
printf("\nImmissione elementi terminata\n");
stampa(testa);
printf("\nElemento da cercare: ");
scanf("%d", &num);
lista *prec, *el = cerca(num, &prec);
if(el)
printf("\nElemento trovato: %s\n", el->data);
else
printf("\nElemento non trovato. . .\n");
elimina(num);
stampa(testa);
system("PAUSE");
return 0;
}