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 codicelista **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(numdata); 
       
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