Ver Mensaje Individual
  #3 (permalink)  
Antiguo 16/05/2010, 12:49
minette1988
 
Fecha de Ingreso: febrero-2010
Mensajes: 258
Antigüedad: 14 años, 1 mes
Puntos: 0
Respuesta: insertar nodo al final de la lista

En este mismo ejercicio he añadido la opción insertar después de un nodo determinado, lo he probado, pero no me acaba de funcionar. Alguien puede decirme si el subprograma tiene algún fallo?. Gracias

Código C:
Ver original
  1. void alta_despues_de(struct persona **lista){
  2.            struct persona *nuevo_nodo;
  3.            struct persona *nodo_aux;
  4.            char nom[100];
  5.            char edad[3];
  6.            int encontrado = 0;
  7.            
  8.            printf("Nombre a buscar para insertar después de el: ");
  9.            scanf("%99s",nom);
  10.            
  11.            nuevo_nodo=(struct persona *)malloc(sizeof(struct persona));
  12.            
  13.  
  14.            if(nuevo_nodo != NULL){
  15.              nodo_aux = *lista;
  16.              while((nodo_aux->siguiente != NULL) && (!encontrado)){
  17.                   if(strcmp(nom,nodo_aux->nom) == 0)
  18.                      encontrado = 1;
  19.                   else{
  20.                        nodo_aux = nodo_aux->siguiente;
  21.                   }
  22.              }
  23.              if((nodo_aux->siguiente == NULL) && (!encontrado))
  24.                 if(strcmp(nom,nodo_aux->nom) == 0)
  25.                   encontrado = 1;
  26.  
  27.              if(encontrado){
  28.                 nuevo_nodo->siguiente=nodo_aux->siguiente;
  29.                 nodo_aux->siguiente=nuevo_nodo;
  30.                 printf("Nombre del nuevo elemento: ");
  31.                 scanf("%99s",nuevo_nodo->nom);
  32.              }
  33.              else{
  34.                   printf("Elemento no encontrado.\n");
  35.                   free(nuevo_nodo);
  36.              }
  37.            }
  38.            printf("Edad a buscar para insertar después de el: ");
  39.            scanf("%2s",edad);
  40.            nuevo_nodo=(struct persona *)malloc(sizeof(struct persona));
  41.  
  42.            if(nuevo_nodo != NULL){
  43.              nodo_aux = *lista;
  44.              while((nodo_aux->siguiente != NULL) && (!encontrado)){
  45.                   if(strcmp(edad,nodo_aux->edad) == 0)
  46.                      encontrado = 1;
  47.                   else{
  48.                        nodo_aux = nodo_aux->siguiente;
  49.                   }
  50.              }
  51.              if((nodo_aux->siguiente == NULL) && (!encontrado))
  52.                 if(strcmp(edad,nodo_aux->edad) == 0)
  53.                   encontrado = 1;
  54.  
  55.              if(encontrado){
  56.                 nuevo_nodo->siguiente=nodo_aux->siguiente;
  57.                 nodo_aux->siguiente=nuevo_nodo;
  58.                 printf("Edad del nuevo elemento: ");
  59.                 scanf("%2s",nuevo_nodo->edad);
  60.              }
  61.              else{
  62.                   printf("Elemento no encontrado.\n");
  63.                   free(nuevo_nodo);
  64.              }
  65.            }
  66. }