PDA

View Full Version : [JAVA] Strutture Collegate Lineari: perchè scansiono la lista in questo modo?


x3d0
12-01-2012, 14:31
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"

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

while (this.init !=null){
this.init = this.init.next;
}


quale errore commetto?



public class NodoLista{
public String info;
public NodoLista next;

public NodoLista(String i, NodoLista n){
this.info = i;
this.next = n;
}
}

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

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();
}
}

ndakota
12-01-2012, 15:19
La butto lì, non ho guardato il codice. Forse, che ti perdi per sempre la testa della lista? :stordita: