dunque rigrazio andrea per le delucidazioni
ho fatto come hai detto però sbaglio ancora qualcosa ti mostro il codice...
	codice:
	public class Lista{
   private Nodo header;
   private int size;
   public Lista(){
        size=0;
   }
   //metodo aggiunge un elemento in testa
   public void add(Object o) {
        if (size==0) {
            header = new Nodo(o);
        }
        else {
            Nodo nuovoNodo = new Nodo(o,header);
            header = nuovoNodo;
        }
        size++;
   }
   //metodo stampa header
   public void print(){
       if(size!=0) header.print();
       else System.out.println("Lista vuota");
   }
   //inverti lista
   public void invertiLista(){
       if(size==0) header=null;
       else if(size==1) header=header;
       else header=header.inverti(header.next,header);
   }
}
 
	codice:
	public class Nodo{
   Object elemento;
   Nodo next;
   public Nodo(Object elemento,Nodo next) {
      this.elemento=elemento;
      this.next=next;
   }
   public Nodo (Object elemento) {
      this.elemento=elemento;
      this.next=null;
   }
   public void print() {
	  System.out.println(elemento);
	  if (next!=null) next.print();
   }
   public Nodo inverti(Nodo attuale, Nodo precedente){
       //se arrivo all'ultimo nodo della lista
       if(attuale.next==null){
           if(precedente!=null) {
           //restituisco un nodo che punta al nodo precedente
           Nodo nuovo = new Nodo(attuale.elemento,precedente);
           //ricorsivamente fino a quando il nodo precedente non è nullo
           return nuovo.inverti(nuovo, attuale);
           }
           else return new Nodo(attuale.elemento);
       }
       //effettuo una ricorsione finchè non arrivo all'ultimo nodo
       else return next.inverti(attuale,precedente);    
   }
}
 
metto anche la classe Test (main) che ho creato per fare le verifiche...
	codice:
	import java.io.*;
public class Test {
   public static void main (String[] args) throws IOException {
       
   Lista list = new Lista();
   BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
   
   System.out.println("quanti elementi vuoi aggiungere alla lista list?");
   int a = Integer.parseInt(buffer.readLine());
   
     for (int i=0; i<a; i++){
       System.out.println("inserisci un elemento in testa a list1: ");
       list.add( Integer.parseInt(buffer.readLine()) );
     }
   
   System.out.println("\nstampo gli elementi della lista list.....");
   list.print();
   System.out.println("\ninversione sul posto.....");
   list.invertiLista();
   System.out.println("\nstampo gli elementi della lista invertita.....");
   list.print();
   }
}
 
dunque il metodo modificaLista() dovrebbe invertire la lista richiamando il metodo ricorsivo della classe nodo che accetta i due parametri Nodo attuale e Nodo precedente
nella classe lista poi non sò cosa inserire come attuale ho inserito header.next e come precedente header non sò se và bene 
 
così come ho postato mi manda un'eccezione di tipo NullPointerException non appena gli elementi della lista sono >1 (non effettua il metodo per size==0 e size==1 classe lista)
help me please!!!