Java - Lista doblemente enlazada

 
Vista:

Lista doblemente enlazada

Publicado por Antonio (1 intervención) el 25/11/2008 16:11:17
Hola a todos:

Espero me podais ayudar, tengo una lista de strings, doblemente enlazada, y estoy un poco liado con los metodos insertar(por la cabecera), y el metodo eliminar.

La clase lista tiene 2 atributos cabecera y cola de tipo nodo, y el nodo 3 atributos 1 con el string y otros dos 1 anterior y otro siguiente.

Espero me podais explicar como hacer los metodos
Insertar(String str), este metodo inserta un nuevo nodo en la cabecera, con la cadena que se le pasa en str.
Borrar(String str), que borra el nodo que contenga la cadena str.

Espero me podais explicar como hacerlo, que tengo un lio con anterior y siguiente que no me aclaro.

Muchas Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Lista doblemente enlazada

Publicado por Mario (199 intervenciones) el 25/11/2008 17:31:14
A ver si puedo orientarte un poco... los dos metodos son sencillos.
Empecemos por el de insertar, que creo que puede ser más sencillo. Supongo que querrás insertar en última posición, con lo cual debes hacer lo siguiente:
- Creas un nodo auxiliar con dicha string.
Ahora antes de nada hay que saber si tu lista es circular o normal. Es decir, si el último nodo de tu lista tiene asignado como nodo siguiente al primero, o si el último nodo de la lista simplemente no tiene asignado nada. Voy a suponer que no es circular, y si fuese circular, creo que podrás apañartelas solo, xq se hace igual.
- Al nodo cola, le asignas como nodo siguiente el nodo auxiliar que has creado, y al auxiliar, le asignas como nodo anterior el nodo cola. Ahora, en la lista, en el atributo cola almacenas el nodo auxiliar, y listo.

Ahora veamos el método borrar, que será muy parecido. Primero tendrás que buscar el nodo que contenga ese String para eliminarlo.
Comienzas buscando desde el nodo cabecera hasta el nodo cola mientras no lo encuentres. Algo más o menos así:

boolean encontrado = false;
Nodo nodoAux = this.cabecera;
do{
if(nodoAux.getString().compareTo(cadenaBuscada)==0){
nodoAux.getAnterior().setSiguiente(nodoAux.getSiguiente());
nodoAux.getSiguiente().setAnterior(nodoAux.getAnterior());
nodoAux = null;
encontrado = true;
}
else{
nodoAux = nodoAux.getSiguiente();
}

}while(encontrado == false && nodoAux!=this.cola);

Creo que el método sería algo más o menos así. Empiezas buscando en el contenido de cada nodo, empezando por la cabecera. Si el contenido del nodo coincide con el que buscas, pues el nodo anterior a ese nodo, tiene que enlazarse con el que prosigue al nodo buscado, y el que prosigue al nodo buscado tiene que enlazarse con el que presigue al nodo buscado. Una vez hecho eso, el nodo que buscabamos se apunta a null para liberar la memoria.
Si no se encuentra, pues el nodo auxiliar pasa a ser el siguiente nodo.
Al haber puesto dos condiciones en el do-while, el bucle acabará al encontrar el nodo o cuando no haya más nodos donde buscar aunque no haya eliminado ninguno.

Espero que te ayude un poco. Si tienes más dudas preguntame ; )
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Lista doblemente enlazada

Publicado por Antonio (1 intervención) el 25/11/2008 17:50:32
Muchas gracias, me ha servido sobre todo el eliminar.
El insertar es en la cabecera no en la cola y la lista, no es circular, te pongo como lo voy hacer a ver si esta bien.

Nodo nodoAux=new Nodo();// se inicializa todo a null;
nodoAux.cadena=str;
if (cabecera==null){ //si esta vacia
nodoAux.setSiguiente(cabecera);
cabecera=nodoAux;
cola=nodoAux;
}
else{ //si hay un elemento solo
if (cabecera.equals(cola)){
nodoAux.setSiguiente(cabecera);
cola.setAnterior(cabecera);
cabecera=nodoAux;}
else //hay varios elementos en la lista
{
nodoAux.setSiguiente(cabecera);
cabecera=nodoAux;
}
}


Gracias de nuevo.
Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Lista doblemente enlazada

Publicado por Mario (199 intervenciones) el 25/11/2008 18:42:19
Si no hay ningun elemento en la lista, no hace falta que le asignes al nodoAux.setSiguiente() la cabecera, ya que esta es null y por defecto ya tiene ese atributo apuntando a null. No es un error, pero simplemente no hace nada :P

Por el resto... yo creo que está bien.

Acuerdate al borrar de comprobar también que si dejas la lista vacía, debes apuntar la cabecera y la cola a null ; )

Suerte!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

colas con listas doblemente ligadas

Publicado por junior (1 intervención) el 23/03/2009 22:00:26
hola quisiera que me ayudaran a programar una implementacion de clase nodo y clase lista, los metodos de insercion, eliminacion, y busqueda, que este simulandiouna cola, la lista es doblemente ligada. grax ya sea que lo publiquen aqui o que me lo puedan mandar a mi correo, desde ahorit gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Lista doblemente enlazada

Publicado por ixanami (2 intervenciones) el 03/11/2009 21:04:15
¡¡¡HoLa!!! lo que necesito es una lista en lazada doble por la verdad no le entiendo y ya es para mañana me urge no se si puedas ayudarme plisssss

Bye te agradecere mucho si me ayudas
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar