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!!