ho modificato un po' la funzione, ma ancora cè qualche problema.... solo una cosa, è giusto questo codice?

void min(void){/*confronto tra campi interi di una lista*/

nodo *p;

for(p = testa; p!=NULL; p = p->next){/*testa punta al 1 elemento*/
do {
if (p->dist > p->next->dist)
testa = elimina(testa,p);/*elimina il nodo*/
else if (p->dist < p->next->dist)
testa = elimina(testa,p->next);
} while (p->next!=NULL);
}
}

perchè non va?