ho corretto inserendo il metodo inversione direttamente nella classe lista
dunque ho notato un altro errore anche in questo qua della copia che ho postato come esempio, infatti come mi hai detto la size rimane nulla e l'ho corretto ponendo la size della nuova lista pari a quella della lista in esame visto che era una copia
ritornando al mio problema ho trovato questa soluzione un pò "macchinosa":
-praticamente mi faccio prima una copia della lista e fin quà ci siamo
-poi su quella copia effettuo l'inversione e anche questa và bene
-unico problema quando vado a fare il ristampo della lista iniziale me la ritrovo "sporcata"
ti mostro cosa ho fatto:
codice:
public class Nodo{
Nodo next;
Object elemento;
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 copia(){
Nodo nuovoNodo = new Nodo(elemento,next);
return nuovoNodo;
}
}
codice:
public class Lista{
private Nodo header;
private int size;
public Lista(){
size=0;
}
public void add(Object o){
if(size==0) header=new Nodo(o);
else header=new Nodo(o,header);
size++;
}
public void print(){
if(size!=0) header.print();
else System.out.println("Lista vuota");
}
//copia la lista
public Lista copiaLista(){
Lista list=new Lista();
list.size=this.size;
if(size!=0) list.header=header.copia();
return list;
}
//restituisce una lista inversa
public Lista invertita(){
Lista nuova = copiaLista();
if(size!=0)nuova.header = inversione(null,nuova.header);
return nuova;
}
//inverte una lista
public Nodo inversione(Nodo prev, Nodo n){
Nodo next_t = n.next;
n.next = prev;
//? : operatore condizionale, ternario
//La forma dell'operatore ternario è:
//condizione ? seVero : seFalso
return next_t != null ? inversione (n, next_t) : n;
}
}
codice:
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException{
Lista lista = new Lista();
BufferedReader buffer = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Quanti elementi vuoi inserire alla lista?");
int a = Integer.parseInt(buffer.readLine());
int i=0;
while (i < a){
System.out.print("Inserisci un elemento in testa alla lista: ");
lista.add( Integer.parseInt(buffer.readLine()) );
i++;
}
System.out.println("\nStampo la lista ottenuta...");
lista.print();
System.out.println("\nCreo una lista inversa...");
Lista lista2 = lista.invertita();
System.out.println("\nStampo la lista ottenuta...");
lista2.print();
System.out.println("\nRistampo la lista iniziale...");
lista.print();
}
}
ecco il test che ho fatto:
Quanti elementi vuoi inserire alla lista?
4
Inserisci un elemento in testa alla lista: 2
Inserisci un elemento in testa alla lista: 6
Inserisci un elemento in testa alla lista: 4
Inserisci un elemento in testa alla lista: 1
Stampo la lista ottenuta...
1
4
6
2
Creo una lista inversa...
Stampo la lista ottenuta...
2
6
4
1
Ristampo la lista iniziale...
1
4
1