elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Eliminar nodo de lista?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: Eliminar nodo de lista?  (Leído 42,547 veces)
monsefoster

Desconectado Desconectado

Mensajes: 83



Ver Perfil
Eliminar nodo de lista?
« en: 29 Enero 2010, 08:43 am »

Hola chicos, necesito "aprender" como eliminar un nodo de una lista...tengo un libro pero no entiendo nada  :huh:

Tengo que hacerle un menu, pero no hay problema...eso no tengo problema, la cosa es que no se como eliminar el nodo...estoy conciente de lo que tengo que hacer, pero no se como hacerlo en la pc  :huh:, me ayudan por favor?

lo que tengo y se que lo que estoy tratando de hacer con eliminar esta mal:

Código
  1. import paquete.*;
  2. import java.io.*;
  3. public class principal {
  4.  
  5. public static void main(String[] args) throws IOException{
  6. String r;
  7. numero n;
  8. int valor;
  9. lista L = new lista ();
  10. do{
  11. valor=(int)(99*Math.random()+1);
  12. n=new numero (valor);
  13. L.agregar(n);
  14. System.out.print ("Agregar otro Nro?: ");
  15. r=en.readLine();
  16. r=r.toUpperCase();
  17. }while (r.equals ("S"));
  18. System.out.println ("Mostrar Lista: ");
  19. L.mostrar();
  20. do{
  21. System.out.println ("Valor a buscar: ");
  22. valor = Integer.parseInt(en.readLine());
  23. L.buscar(valor);
  24. System.out.print ("Desea hacer otra busqueda S/N: ");
  25. r=en.readLine ();
  26. r=r.toUpperCase();
  27. }while (r.equals("S"));
  28. do{
  29. System.out.println ("Eliminar numero en la posicion: ");
  30. valor = Integer.parseInt(en.readLine());
  31. L.eliminar();
  32. L.mostrar();
  33. System.out.println ("Desea Eliminar otro objeto: ");
  34. r=en.readLine();
  35. r=r.toUpperCase();
  36. }while (r.equals ("S"));
  37. }
  38. }

Código
  1. package paquete;
  2.  
  3.  
  4. public class numero {
  5. private int num;
  6. private numero sig;
  7.  
  8. public numero(int x) {
  9. num=x;
  10. sig=null;
  11. }
  12. public int retx(){
  13. return num;
  14. }
  15. public numero retsig(){
  16. return sig;
  17. }
  18. public void setsig(numero n){
  19. sig=n;
  20. }
  21. }

Código
  1. package paquete;
  2.  
  3. public class lista {
  4. private numero i;
  5.  
  6. public lista() {
  7. i=null;
  8. }
  9. public void agregar (numero n){
  10. if (i==null){
  11. i=n;
  12. }
  13. else{
  14. n.setsig(i);
  15. i=n;
  16. }
  17. }
  18. public void mostrar(){
  19. numero t=i;
  20. if (i!=null){
  21. while (t!=null){
  22. System.out.print(t.retx()+" ");
  23. t=t.retsig();
  24. }
  25. }
  26. else{
  27. System.out.println ("Lista Vacia");
  28. }
  29.  
  30. }
  31. public void buscar (int x){
  32. numero t=i;
  33. int pos=1;
  34. if (i!=null){
  35. while (t!=null){
  36. if (t.retx()==x){
  37. System.out.println ("El numero: "+x+" esta en la posicion "+pos+ " de la lista");
  38. break;
  39. }
  40. t=t.retsig();
  41. pos++;
  42. }
  43. if (t==null)
  44. System.out.println ("El numero "+x+" no esta en la lista");
  45. }
  46. }
  47. public lista eliminar (int n){
  48. int pos=1;
  49. numero t=i;
  50. if (t!=null){
  51. if (pos==n){
  52. while (pos=n){
  53. }
  54. t=t.setsig();
  55. }
  56. else{
  57. pos++;
  58. }
  59. }
  60.  
  61. }
  62. }

Agradeceria la ayuda inmensamente, lei algo de un nodo inicial, y anterior...la otra cosa es que no se como referenciar nodos de una lista...probablemente por eso se me hace tan dificil....

Lo que quiero hacer es que el usuario de la posicion del nodo que quiere eliminar y este se elimine... :huh:


En línea

egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: Eliminar nodo de lista?
« Respuesta #1 en: 29 Enero 2010, 15:25 pm »

Hola, excelente hiciste la lista de nodos tu mismo pero no sabes como eliminar la lista, te voy a dar el algoritmo.

Como es una lista de nodos simplemente enlazados, debes encontrar el nodo anterior a borrar y cuando lo encuentres debes hacer esto.
//BorrarNodo
Nodo anterior; //Nodo anterior al valor a borrar
Nodo borrar; //Nodo a borrar
borrar <- anterior.siguiente;
anterior.siguiente <- anterior.siguiente.siguiente;
Y con eso lo borrar ahora para buscarlo
Debes tener precaución que la lista no este vacia y que el siguiente no sea nulo.

Nodo nodo;
valorBorrar <- 18;
si nodo.siguiente != nulo entonces
 si nodo.siguiente.valor =  valorBorrar entonces
    borrarNodo
 final si
final si

Es mas o menos asi  :rolleyes:
Saludo





En línea

monsefoster

Desconectado Desconectado

Mensajes: 83



Ver Perfil
Re: Eliminar nodo de lista?
« Respuesta #2 en: 30 Enero 2010, 23:10 pm »

Sinceramente no tengo idea de como hacerlo...
Lo que esta alli lo hizo el prof en la practica... y pretende ponerlo para el examen...

Intente hacer algo pero no estoy ni cerca...
No tengo idea de como se guarda la lista en memoria...no se como acceder a cada uno de los elementos de esta y eso me complica...

no es como un arreglo que con v[0] se que tengo el primer elemento del arreglo... y esta todo puesto bajo v, donde cada [] indica la direccion de memoria donde esta ese elemento...

lo de la posicion no es dificil, pues ya lo hice antes, pero no entiendo como se supone que debo borrar el nodo... Lo que me dijiste, ya lo tengo en el libro y sigo entiendiendo nada  :huh:





En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Eliminar nodo de lista?
« Respuesta #3 en: 30 Enero 2010, 23:21 pm »

Sinceramente no tengo idea de como hacerlo...
Lo que esta alli lo hizo el prof en la practica... y pretende ponerlo para el examen...

Intente hacer algo pero no estoy ni cerca...
No tengo idea de como se guarda la lista en memoria...no se como acceder a cada uno de los elementos de esta y eso me complica...

no es como un arreglo que con v[0] se que tengo el primer elemento del arreglo... y esta todo puesto bajo v, donde cada [] indica la direccion de memoria donde esta ese elemento...

lo de la posicion no es dificil, pues ya lo hice antes, pero no entiendo como se supone que debo borrar el nodo... Lo que me dijiste, ya lo tengo en el libro y sigo entiendiendo nada  :huh:






Intenta guardar esa lista en un archivo de texto y modificarlo desde este, osea tu lo parseas, todos los nodos a xml y luego organizas, eliminas e incluse les das id para clasficarlos correctamente.

Saludos
En línea

egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: Eliminar nodo de lista?
« Respuesta #4 en: 30 Enero 2010, 23:26 pm »

 :rolleyes:
Para acceder a la lista es facil
Código
  1. public class Nodo{
  2.  int value;
  3.  Nodo next;
  4. }
  5. //Por ahi
  6. Nodo aux = lista;
  7. while(aux != null){
  8.    Sytem.out.println(aux.next);
  9.    aux = aux.next;
  10. //Para que paresca como arreglo
  11. aux = lista
  12. for(int i;aux!=null;i++){
  13.    Sytem.out.println("lista["+i+"]="+aux.next);
  14.    aux = aux.next;
  15. }
  16. }

Saludos

PS:
Intenta guardar esa lista en un archivo de texto y modificarlo desde este, osea tu lo parseas, todos los nodos a xml y luego organizas, eliminas e incluse les das id para clasficarlos correctamente.

Saludos

Estas matando una mosca con un cañon hombre es mas facil como crees.
En línea

Debci
Wiki

Desconectado Desconectado

Mensajes: 2.021


Actualizate o muere!


Ver Perfil WWW
Re: Eliminar nodo de lista?
« Respuesta #5 en: 30 Enero 2010, 23:34 pm »

:rolleyes:
Para acceder a la lista es facil
Código
  1. public class Nodo{
  2.  int value;
  3.  Nodo next;
  4. }
  5. //Por ahi
  6. Nodo aux = lista;
  7. while(aux != null){
  8.    Sytem.out.println(aux.next);
  9.    aux = aux.next;
  10. //Para que paresca como arreglo
  11. aux = lista
  12. for(int i;aux!=null;i++){
  13.    Sytem.out.println("lista["+i+"]="+aux.next);
  14.    aux = aux.next;
  15. }
  16. }

Saludos

PS:
Intenta guardar esa lista en un archivo de texto y modificarlo desde este, osea tu lo parseas, todos los nodos a xml y luego organizas, eliminas e incluse les das id para clasficarlos correctamente.

Saludos

Estas matando una mosca con un cañon hombre es mas facil como crees.
Que tiene de dificil? Enserio, no le veo complicación.

Saludos
En línea

egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: Eliminar nodo de lista?
« Respuesta #6 en: 30 Enero 2010, 23:59 pm »

Me referias pasarlo a XML eso seria matar una mosca con un cañon.
En línea

monsefoster

Desconectado Desconectado

Mensajes: 83



Ver Perfil
Re: Eliminar nodo de lista?
« Respuesta #7 en: 31 Enero 2010, 01:40 am »

Sigo sin entender pero nada... y lo peor que no soy la unica, alguien mas de mi clase entro y vio mi post y quedamos igual..  :huh:

No entiendo a quien se le ocurre, dar una sola clase, y pretender ponerlo en la prueba, sin tener otra oportunidad para preguntar!
En línea

egyware


Desconectado Desconectado

Mensajes: 526



Ver Perfil WWW
Re: Eliminar nodo de lista?
« Respuesta #8 en: 31 Enero 2010, 02:41 am »

Me recuerda lo que paso a mis compañeros, el profe paso una clase y evaluo de inmediato, gracias que yo sabia java de antes y que hice para remediarlo les enseñe  ;D
Bucha yo no quiero darte la solucion al problema aunque me la se mas bien quiero que aprendas.
Primero hay que hacer el algoritmo que recorra toda la lista

Código
  1. public class Nodo{
  2. public  int value;
  3. public Nodo next;
  4. }
  5. //En el main
  6. int buscar = 10;//por colocarle :P
  7. Nodo lista = ...
  8. Nodo aux = lista;
  9. //revisar el primer nodo
  10. if(aux.value== buscar){
  11.  aux = aux.next; //Corro el puntero hacia el siguiente desenlazando
  12.  lista = aux;
  13. }else
  14. while(aux!=null){
  15.   if(aux.next!=NULL){
  16.     if(aux.next.value == buscar){
  17.          //¡¡¡Encontrado!!!! vea anexo XD
  18.     }
  19.   }
  20. }
  21.  

Espera que te hare un dibujito pero mas o menos tienes que tener esto para eliminar
Edit:
Bueno como ya has visto el bucle anterior y que reclama L-EYER tu debes saberlo pero para encontrar el nodo anterior.
Mira en la figura 1) es una representacion grafica, los numeros corresponde a value y las flechas a next que es que apunta a la siguiente clase (igual como los punteros de C)

En la figura 2) como queremos borrar el numero 5 entonces con el bucle anterior buscamos el nodo anterior el cual es 4.
En la figura 3) que lo que hacemos es sacar 5 de la lista para eso hacemos que 4 apunte al  al siguiente 5, osea siguiente siguiente de 4. En nuestro algoritmo quedará anterior.siguiente = anterior.siguiente.siguiente
En la figura 3.a) se ve que el nodo que desenlazamos todavia apunta a parte de la lista entonces hacemos que apunte a null para definitivamente sacarlo en la figura 3.b) queda solito :)  para borrarlo de la memoria pero como es Java basta con perder toda referencia al puntero para que se valla a la basura (Garbage Colector de Java en caso de C/C++ free/delete).
Esto es valido tanto como C/C++, Java o lenguaje preferentemente que use punteros.
Tu algoritmo de borrado en Java quedaria asi continuando con lo que te deje
Código
  1. //Anexo XD
  2. //Aqui se ve como la fig 2)
  3. Nodo borrar = aux.next; //Guardamos el nodo
  4. aux.next = aux.next.next; //anterior.siguiente = anterior.siguiente.siguiente  fig 3) ;)
  5. //todavia el valor a sacar queda apuntando a parte de la lista
  6. borrar.next = null; //Con esto queda como fig 3.b)

Bueno eso seria saludos
« Última modificación: 31 Enero 2010, 03:20 am por egyware » En línea

Leyer


Desconectado Desconectado

Mensajes: 782


leyer@elhacker.net


Ver Perfil WWW
Re: Eliminar nodo de lista?
« Respuesta #9 en: 31 Enero 2010, 02:50 am »

obviamente eso ya lo tiene :xD lo que no sabe es como eliminarlo

PD: pregunto lo hiciste tu o ses algo que te dio el prof por que la solucuion seria y por que no usas un generico  class Lista<T> {}
En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
ejemplo de lista con nodo
Java
robiiii 1 2,335 Último mensaje 26 Julio 2012, 19:32 pm
por leogtz
Ayuda con funcion insertar nodo en lista!!!
Programación C/C++
mathias_vg 5 1,169 Último mensaje 10 Octubre 2015, 22:24 pm
por ivancea96
regresar al primer nodo de lista
Programación C/C++
d91 2 924 Último mensaje 20 Octubre 2015, 18:24 pm
por d91
Eliminar nodo en lista enlazada: problema con el último nodo [C]
Programación C/C++
Rhessus 2 2,971 Último mensaje 20 Julio 2016, 06:08 am
por Rhessus
Lista simple eliminar nodo segun un valor
Programación C/C++
Beginner Web 2 583 Último mensaje 15 Septiembre 2018, 09:00 am
por Beginner Web
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines