Eliminar nodo de lista?

Iniciado por monsefoster, 29 Enero 2010, 08:43 AM

0 Miembros y 1 Visitante están viendo este tema.

egyware

L-Eyer no seas impaciente ademas no quiero darle la tarea hecha si se la doy hecha le ira mal en el certamen  >:(

Leyer


egyware

Ahi te deje la respuesta dentro del mismo hilo unos cuantos post antes espero que te sirva y aprendas como hacerlos, sinceramente los nodos de C son mas faciles de comprende que java porque la mayoria cree que Java no existen los punteros y realmente los objetos de java son punteros  :laugh:
http://foro.elhacker.net/java/eliminar_nodo_de_lista-t282749.0.html;msg1395878#msg1395878

Saludos

monsefoster

Y continuo con lo del nodo...
lo estoy haciendo mal probablemente...

Código (java) [Seleccionar]
public void eliminar (numero x){
numero t=i;
numero ant=x.sig;
ant.sig=t.sig;
if (i!=null){
while (t!=null){
if (t.retx()==x.num){
ant.sig=t.sig;
}
t=t.retsig();
ant.sig=t.sig;

}
}
}


Ayuda!  :huh:

Leyer

y si le colocas al numero un 0 en ves de null y que al mostrar la lista practicamente ese numero este eliminado?

Un Saludo!

monsefoster

No entendi muy bien lo que quisiste decir...

:huh:

Leyer

#16
ni yo puedo aplicar lo que dijo egyware suena facil decirlo pero hacerlo en el code puff :¬¬ yo estuve viendo pero no le entendi pero nada :xD

Código (java) [Seleccionar]
Agregar otro Nro?: s
Agregar otro Nro?: s
Agregar otro Nro?: s
Agregar otro Nro?: s
Agregar otro Nro?: s
Agregar otro Nro?: s
Agregar otro Nro?: n
Mostrar Lista:
55 11 69 26 5 44 27 Valor a buscar:
69
El numero: 69 esta en la posicion 3 de la lista
Desea hacer otra busqueda S/N: n
Eliminar numero en la posicion:
3
Eliminado: 69
55 11 26 5 44 27 Desea Eliminar otro objeto:


a lo que me refiero es que los que esten en 0 osea al valor que vas a aliminar colocalo en 0 y  tomalos como si estubieran eliminados y muestras la lista

egyware

#17
Cita de: LEYER en 10 Febrero 2010, 03:09 AM
ni yo puedo aplicar lo que dijo egyware suena facil decirlo pero hacerlo en el code puff :¬¬ yo estuve viendo

Y eso que te di la solución, COPY/PASTE osbiamente sin tu menú
vaya que has salido porfiado mi idea no era solucionarte el codigo es que APRENDAS como es toda esta cosa a nosotros el profresor nos hizo dibujar todo eso  antes de aplicar el codigo y aprendi creo que el 90% de la clase aprendio bien  aplicar los nodos.

Citara lo que me refiero es que los que esten en 0 osea al valor que vas a aliminar colocalo en 0 y  tomalos como si estubieran eliminados y muestras la lista
Pero siguen en la lista ocupando memoria, eso no es eliminar eso es ocultar -.-

Código (java) [Seleccionar]

//Veamos
public /*lista*/void eliminar (int n){ /*Modifico el tipo porque modifica la estructura interna y no devuelve una nueva lista*/
int pos=1;
numero t=i;
if (t!=null){//Esto esta bien comprobar siempre la lista no esta vacia
             if(n==0){//Caso particular, es el primero
                    //Como almacenamos previamente el primero de la lista, lo desligamos de la lista
                    i = i.retsig();  // i = i.siguiente
                    t.setsig(null); // t.siguiente = null
                    //Ahora desicion tuya que haces con t, nodo eliminado
                    System.out.println("Nodo[0]="+t.retx()+",eliminado");
             }else{
                    //Buscar el anterior
                    for(;pos<=n-1;pos++){
                       if(t==null)//llegamos al final
                            return;//salimos sin exito T_T
                       t = t.retsig();  
                    }
                    /*encontramos el anterior y ahora que hacemos  es guardar el nodo a borrar que es justamente el siguiente*/
                    numero borrar = t.retsig();                
                    //lo desenlazamos
                    t.setsig(t.retsig().retsig());//t.siguiente = t.siguiente.siguiente
                    /*Terminamos de desenlazar para que el nodo extraido no apunte a ninguna parte de la lista*/
                    borrar.setsig(null);//t.siguiente = null
                    System.out.println("Nodo["+n+"]="+borrar.retx()+",eliminado");
             }
}

Bueno eso seria para borrar espero no haberme equivocado ya que no lo he probado, fijate que explique el codigo y use el mismo algoritmo que propuse antes. Te recomiendo ALTAMENTE que hagas una representacion grafica (como el dibujo que te mostre antes) y elijas un nodo cualquiera, y que escribas los pasos con cualquier algoritmo de como borrarlo.
Haslo!!!


Saludos