andbin ho risolto 
ho seguito il tuo consiglio e mi sn inventato una cosa hehe :P
ecco come ho risparmiato 50righe:
codice:
private nodo check_posizione(persona nuova){
nodo precedente=null, successivo=start ;
while(successivo!=null && check("cognome",nuova,successivo)>0){precedente=successivo;successivo=successivo.link;}
while(successivo!=null && check("cognome",nuova,successivo)==0){
while(successivo!=null && check("cognome",nuova,successivo)==0 && check("nome",nuova,successivo)>0){precedente=successivo;successivo=successivo.link;}
while(successivo!=null && check("cognome",nuova,successivo)==0 && check("nome",nuova,successivo)==0){
while(successivo!=null && check("cognome",nuova,successivo)==0 && check("nome",nuova,successivo)==0 && check("anno",nuova,successivo)>0){precedente=successivo;successivo=successivo.link;}
return precedente;
}
return precedente;
}
return precedente;
}
private int check(String dato, persona nuova, nodo successivo){
if ("cognome".equals(dato)){return nuova.cognome.compareTo(successivo.info.cognome);}
else if("nome".equals(dato)){return nuova.nome.compareTo(successivo.info.nome);}
else if("anno".equals(dato)){
if(nuova.anno>successivo.info.anno){return 1;}
else if(nuova.anno==successivo.info.anno){return 0;}
else{return -1;}}
return 0;
}
grazie mille per i consigli e la pazienza 
angelo