Jump to content

problema con Nodo en java


Recommended Posts

Buenas gente, tengo un problema ...

 

sucede que tengo que hacer un trabajo y pasa que necesito eliminar el ultimo nodo de la lista, pero cuando lo hago me los elimina todos y solo me deja el primero xD!!!(oh el segundo no me acuerdo xD)

acá les dejo el código de lo que trato de hacer :/

el primer if es cuando es solo 1 nodo se elimina al tiro el problema es cuando son mas de 3 (obviamente con 2 pasa piola el programa por que me elimina todo menos el primero xD)

 

 

 

public Nodo eliminarUltimo() /*programa y la ctmre xD!*/

{

Nodo z=null;

z=this;

if(this.sig==null)

{

return null;

}

else

{

if(z.sig!=null)

{

z.sig=z;

this.sig=null;

}

return z;

}

}

 

 

 

alguien que me ayude muchas gracias :B

Link to comment
Share on other sites

:mmm: Hay algo raro, deberías mostrar cómo declaraste la clase...Supongo que tienes una clase Nodo que tiene un campo público llamado sig, pero la clase Lista (o como sea que se llame), no tengo claro qué campos tiene y cómo sabe qué nodo es el último y ¿qué pasa con el primer nodo? De hecho, parece que no tienes una clase Lista, me da la impresión que sólo usas la clase Nodo para guardar la lista :tonto:

 

Para trabajar con listas, pilas y filas, tienes que usar una clase Nodo, esta debe tener uno o varios constructores para asignarle valores a los campos y uno de esos campos será del propio tipo Nodo (es una declaración recursiva) que "apuntará" a otro nodo; además tienes que declarar una clase Lista que tendrá 1 o 2 campos de tipo Nodo, en donde se guardarán el primero y el último (si estás declarando una Pila, entonces basta con un solo nodo, en éste se guarda el último nodo ingresado a la pila, pero para filas y listas necesitas más de un nodo), la clase Lista es la que se encarga de asignar un valor al campo sig (otros prefieren llamarlo sgte ó next) de tal forma de ir armando la lista.

 

Por si acaso, a la clase Nodo puedes no declararle ningún constructor y dejar todos los campos como públicos, pero generalmente a los profes no les gusta mucho esta forma ;) , en todo caso, el campo sig sí puedes dejarlo como público :sipis: .

Link to comment
Share on other sites

Está muy raro tu código, sobre todo porque haces esto:

 

Nodo z=null;

z=this;

 

Creo que estás confundiéndote, porque al hacer esa asignación no estás creando una copia, estás creando una referencia, por lo que si modificas z, también se modifica this, y viceversa.

 

Por otro lado, lo más raro es que no haya ningún while en tu código, porque si te piden eliminar el último, lo lógico es que tengas que recorrer la lista para llegar hasta el último elemento, para luego borrarlo. Algo así:

 

Esta es una implementación bien charcha, no me puse en todos los casos

 

public void eliminarUltimo()

//usamos un nodo auxiliar para recorrer la lista

Nodo aux = this;

//recorremos la lisa hasta llegar al final

while(aux.sig!=null) aux = aux.sig;

//mandamos a null aux, y de esa forma, lo eliminamos

aux = null;

}

 

o en su forma recursiva:

 

public void eliminarUltimo()

{

//si somos el nodo final

if(aux.sig != null){

if(aux.sig.sig = null)

aux.sig = null;

else

aux.sig.eliminarUltimo();

}

}

 

creo que así sería, disculpa si me equivoqué, estoy cagao desueño

 

en todo caso yo implementé una librería de lista enlazada en java hace un tiempo, si sigues teniendo problemas te puedo mostrar mi implementación

 

saludos

Edited by zafrada
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...