Dunque, queste sono le classi che gestiscono una lista di Nodi (NodoLista e ListaStringhe).
Il mio dubbio è nel metodo ListaStringhe->add() in cui viene aggiunto un nuovo nodo alla ListaStringa in posizione k-esima.
Il codice è corretto, ma non riesco a capire perchè viene fatta questa assegnazione per "scansionare tutte i nodi della lista"
Codice PHP:
NodoLista p = this.init;
Dopo l'assegnazione, "ciclo" la variabile p ed addirittura la modifico. Quello che non mi è chiaro è perchè l'introduzione di una nuova variabile. Non era sufficiente "ciclare" direttamente this.init ?
Se avessi fatto
Codice PHP:
while (this.init !=null){
this.init = this.init.next;
}
quale errore commetto?
Codice PHP:
public class NodoLista{
public String info;
public NodoLista next;
public NodoLista(String i, NodoLista n){
this.info = i;
this.next = n;
}
}
Codice PHP:
public class ListaStringhe{
private NodoLista init;
public ListaStringhe(){
this.init = null;
}
public void add(int k, String x){
if(k<0) throw new RuntimeException();
if(k==0){
NodoLista p2 = new NodoLista(x, this.init);
this.init = p2;
}else{
NodoLista p = this.init;
for(int i=1; p!=null && i<k; i++){
p = p.next;
}
if(p!=null){
NodoLista p2 = new NodoLista(x, p.next);
p.next = p2;
}else{
throw new RuntimeException();
}
}
}
public void stampa(){
NodoLista p = this.init;
if(p==null){System.out.println("Lista Vuota");}
while (p!=null) {
System.out.print(p.info + ",");
p = p.next;
}
System.out.println();
}
}
Main.java
Codice PHP:
public class Main{
public static void main(String[] args){
ListaStringhe ls = new ListaStringhe();
ls.stampa();
ls.add(0, "Zero");
ls.stampa();
ls.add(1, "Primo");
ls.add(2, "Secondo");
ls.add(1, "Secondo");
ls.stampa();
}
}