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