Borrego Posted October 16, 2012 Report Share Posted October 16, 2012 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 More sharing options...
susodicho Posted October 16, 2012 Report Share Posted October 16, 2012 :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 More sharing options...
zafrada Posted October 16, 2012 Report Share Posted October 16, 2012 (edited) 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 listaNodo aux = this;//recorremos la lisa hasta llegar al finalwhile(aux.sig!=null) aux = aux.sig;//mandamos a null aux, y de esa forma, lo eliminamosaux = null;} o en su forma recursiva: public void eliminarUltimo(){//si somos el nodo finalif(aux.sig != null){if(aux.sig.sig = null) aux.sig = null;elseaux.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 October 16, 2012 by zafrada Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now