innanzitutto spero di aver azzeccato il titolo della discussione
volevo sapere se qualcuno di voi riesce ad aiutarmi a trasformare questa funzione in ricorsiva:
codice:
    private nodo check_posizione(persona nuova){
        nodo precedente, successivo, posizione;
        precedente=start;
        successivo=start;
        posizione=start;
        if(check_cognome(nuova,start)<0){posizione=null;return posizione;}
        else if(check_cognome(nuova,start)==0){
            if(check_nome(nuova,start)<=0){posizione=null;return posizione;}
            else{
                successivo=start.link;
                while(successivo!=null && check_cognome(nuova,successivo)==0){
                    if(check_nome(nuova,successivo)<=0){posizione=precedente;return posizione;}
                    else{precedente=successivo;successivo=successivo.link;}
                }
                if(successivo==null || check_cognome(nuova,successivo)!=0){posizione=precedente;return posizione;}
            }
        }
        else{
            precedente=successivo;
            successivo=start.link;
            while(successivo!=null && check_cognome(nuova,successivo)>0){
                precedente=successivo;
                successivo=successivo.link;
            }
            if(successivo==null || check_cognome(nuova,successivo)<0){posizione=precedente;return posizione;}
            else if(check_cognome(nuova,successivo)==0){
                if(check_nome(nuova,successivo)<=0){posizione=precedente;return posizione;}
                else{
                    precedente=successivo;
                    successivo=successivo.link;
                    while(successivo!=null && check_cognome(nuova,successivo)==0){
                        if(check_nome(nuova,successivo)<=0){posizione=precedente;return posizione;}
                        else{precedente=successivo;successivo=successivo.link;}
                    }
                    if(successivo==null || check_cognome(nuova,successivo)!=0){posizione=precedente;return posizione;}
                    else{posizione=precedente;return posizione;}
                }
            }
        }
        return posizione;
    }
le funzioni check_nome() e check_cognome() se ve lo state chiedendo restituiscono un intero che determina se il cognome viene prima o dopo
codice:
        
    private int check_nome(persona nuova, nodo successivo){
        return nuova.nome.compareTo(successivo.info.nome);
    }
    
    private int check_cognome(persona nuova, nodo successivo){
        return nuova.cognome.compareTo(successivo.info.cognome);
    }
ecco ora se leggete la funzione check_posizione() vi rendete conto che controlla il cognome, e in base al cognome (se e' uguale) controlla il nome.
ora, considerando che la funzione e' gia' bella lunghetta solo controllando per cognome e nome, dovrei controllare anche per anno e per altri dati, potrei continuare a implementare condinzioni ma voglio ridimensionare il tutto rendendola ricorsiva, tipo check_posizione(dato) dove dato e' il campo da controllare (cognome, nome, anno, etc)
in modo che ad esempio quando il cognome risulta uguale io faccia una cosa del genere:
if(check_cognome(nuova,successivo)==0){check_posiz ione(nome);}
qualcuno di voi ha qualche idea?
perche' non riesco a venirne fuori sinceramente!
se avete altre soluzioni o consigli sul codice e' tutto ben accetto
grazie, angelo

EDIT: in realta' ci ho gia' provato, ma non riesco a passare come parametro alla funzione una sorta di "stringa" del tipo:
codice:
private nodo check_posizione(persona nuova){
        ...
        if(check(nuova,start,nome)
        oppure
        if(check(nuova,start,cognome)
}

private int check(persona nuova, nodo successivo, String dato){
        return nuova.nome.compareTo(successivo.info.dato);
    }
la parte in rosso, ovviamente, e' sbagliata perche' cerca un campo successivo.info.dato che non esiste (non avendo dichiarato String dato), dato dovrebbe solo servire per scegliere quale campo controllare!!