Ver Mensaje Individual
  #4 (permalink)  
Antiguo 19/05/2010, 04:43
minette1988
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 9 meses
Puntos: 0
Respuesta: crear una lista enlazada

Hola, he añadido un nuevo dato a la lista el teléfono. Tengo un subprograma para borrar un nodo, en este pido el nombre a borrar, pero cuando lo compilo no entiendo por qué sólo con pedir el nombre a borrar me borra también el teléfono. Después cuando pido alta después de, es decir, después de un nodo en concreto, pongo el nombre a buscar para insertar después de él, a continuación pongo el nuevo nombre y cuando pido mostrar la lista me sale el nuevo nodo que he insertado, pero con el teléfono del anterior nodo que he borrado.

Voy a poner un ejemplo para que lo veáis más claro:

María 12, José 13, Pepe 14. Quiero borrar el 2º nodo, con introducir sólo el nombre a borrar, en este caso José, el resultado es: María 12, Pepe 14
Cuando pido insertar un nodo después de otro, por ejemplo, después de María, introduzco el nombre a buscar para insertar después de él y a continuación pongo el nuevo nombre. El resultado es este: María 12, Sara 13, Pepe 14. Si te fijas aparece el nuevo nombre Sara, pero el teléfono corresponde al nodo que he borrado antes. ¿Cómo puedo insertar el nuevo teléfono sin que me aparezca el teléfono de la persona que acabo de eliminar?

Este es el módulo para dar de alta después de un nodo determinado:

Código C:
Ver original
  1. void alta_despues_de(struct nodo_lista **lista){
  2.    struct nodo_lista *nuevo_nodo;
  3.    struct nodo_lista *nodo_aux;
  4.  
  5.    char nombre[T_NOM];
  6.    int encontrado = 0;
  7.  
  8.    printf("Nombre a buscar para insertar después de él: ");
  9.    LEE_CAD(nombre,T_NOM);
  10.  
  11.    nuevo_nodo=(struct nodo_lista *)malloc(sizeof(struct nodo_lista));
  12.  
  13.    if(nuevo_nodo != NULL){
  14.       nodo_aux = *lista;
  15.       while((nodo_aux->siguiente != NULL) && (!encontrado)){
  16.         if(strcmp(nombre,nodo_aux->nombre) == 0)
  17.           encontrado = 1;
  18.         else{
  19.              nodo_aux = nodo_aux->siguiente;
  20.         }
  21.       }
  22.       if((nodo_aux->siguiente == NULL) && (!encontrado))
  23.           if(strcmp(nombre,nodo_aux->nombre) == 0)
  24.             encontrado = 1;
  25.  
  26.       if(encontrado){
  27.           nuevo_nodo->siguiente=nodo_aux->siguiente;
  28.           nodo_aux->siguiente=nuevo_nodo;
  29.           printf("Nombre del nuevo elemento: ");
  30.           LEE_CAD(nuevo_nodo->nombre,T_NOM);
  31.       }
  32.       else{
  33.            printf("Elemento no encontrado.\n");
  34.            free(nuevo_nodo);
  35.       }
  36.    }
  37. }