listas enlazadas y objetos
Me gustarÃa recorrer una lista enlazada y borrar sus elementos. Tengo esto para meter los elementos:
ListaEnlazada nuevo;
nuevo = new ListaEnlazada();
nuevo.valor=x;
nuevo.siguiente = this.siguiente;
this.siguiente = nuevo;
y ahora quiero empezar desde el principio y borrar los elementos, pero no se posicionarme en el primer elemento. Ayuda!
Gracias.
ListaEnlazada nuevo;
nuevo = new ListaEnlazada();
nuevo.valor=x;
nuevo.siguiente = this.siguiente;
this.siguiente = nuevo;
y ahora quiero empezar desde el principio y borrar los elementos, pero no se posicionarme en el primer elemento. Ayuda!
Gracias.
supongo que tendrás una clase Nodo con al menos:
public class Nodo{
...
Nodo siguiente;
}
Donde siguiente apunta al siguiente elemento de la lista(y si no hay es null) y una clase lista con al menos:
public class Lista{
...
Nodo primero;
}
Donde primero apunta al primer elemento de la listapues bien, para eliminar todos los elementos en la clase lista inserta el siguiente método:
public void vaciar(){
Nodo actual=primero;
Nodo anterior=null;
while(actual!=null) //Mientras queden elementos...
{
anterior=actual; //Marca al actual
actual=actual.siguiente; //avanza el actual
anterior.siguente=null; //borra la referencia
}
if(anterior!=null) //Si el primero es null de no poner este if darÃa error pero
anterior.siguiente=null; //si no hacemos esto, dejamos al último elemento referenciado
primero=null; //con el penúltimo. Finalmente quitamos la referencia al
} //primero
De este modo, si no existen más referencias a los nodos estos se quedan sin referencias y será recogidos por el recolector de basura. También se puede hacer primero=null, pero entonces tendrás que esperar a cada recolección de basura para que cada nodo se quede sin referencias, a no ser que en memoria esté en el orden en el que han sido creados, pero no se pueden hacer suposiciones al respecto.
public class Nodo{
...
Nodo siguiente;
}
Donde siguiente apunta al siguiente elemento de la lista(y si no hay es null) y una clase lista con al menos:
public class Lista{
...
Nodo primero;
}
Donde primero apunta al primer elemento de la listapues bien, para eliminar todos los elementos en la clase lista inserta el siguiente método:
public void vaciar(){
Nodo actual=primero;
Nodo anterior=null;
while(actual!=null) //Mientras queden elementos...
{
anterior=actual; //Marca al actual
actual=actual.siguiente; //avanza el actual
anterior.siguente=null; //borra la referencia
}
if(anterior!=null) //Si el primero es null de no poner este if darÃa error pero
anterior.siguiente=null; //si no hacemos esto, dejamos al último elemento referenciado
primero=null; //con el penúltimo. Finalmente quitamos la referencia al
} //primero
De este modo, si no existen más referencias a los nodos estos se quedan sin referencias y será recogidos por el recolector de basura. También se puede hacer primero=null, pero entonces tendrás que esperar a cada recolección de basura para que cada nodo se quede sin referencias, a no ser que en memoria esté en el orden en el que han sido creados, pero no se pueden hacer suposiciones al respecto.
