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