Problema con un programa

Iniciado por SXF, 16 Mayo 2011, 13:17 PM

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

SXF

    Buenas pues la duda es la siguiente , intento eliminar un elemento de la lista , pero no lo consigo me tira un error de ejecucion.
   Si alguien me puede ayudar.

Código (cpp) [Seleccionar]
void eliminar(nodo *cab,nodo *fin)
{    int num;
   cout<<"Dime el numero del libro a eliminar: "<<endl;
   cin>>num;
   nodo *temp2;
   temp2=cab;
   nodo *N;
   
    while(temp2 != NULL){
               
                        if (temp2->info==num){
                     
                       nodo *aux;
                       aux=temp2; //Guardo la direccion del elemento buscado
                       
                       temp2=temp2->sgt;  //Aqui creo que esta el problema
                       N=temp2;
                                 
                       delete aux;//Elimino el elemento (Libero el free store)
                     
                       temp2=N;
                       
                                                }
     
     temp2=temp2->sgt;
     
     
   }
   
}

dakomt

vaya.. 10 días y nadie te ha contestado..  :-\    ¿llegaste a solucionarlo?

El algoritmo que planteas falla por todos lados  :-(

Cuando eliminas un nodo de una lista  enlazada (dinámica) tienes que tener en cuenta 5 casos

Salvo en el último donde no tienes que hacer nada (salvo recorrer tooooda la lista  :D) tienes que tener mucho cuidado con la actualización de los punteros y el orden en el que la hagas.

- La lista está vacia ---> cab == NULL

- El nodo a eliminar es el nodo cabecera. --> si la lista tiene mas de un elemento, el segundo pasa a ser el nodo cabecera.

- El nodo a eliminar es el último nodo de la lista. --> el penultimo ahora apuntara a NULL

- El caso general. El nodo a eliminar está dentro de la lista. --> el anterior tiene que apuntar ahora al siguiente (Es el único caso que contemplas pero las actualizaciones de los punteros y el orden están mal)

- No existe el nodo

etc etc.

Espero que lo solucionaras  ;D


SXF

Gracias por ser el ùnico que se inclino por contestarne, no se que tiene la "Gente" contra mi jeje , no mentira. Despuès de mucho pensar y buscar  ya lo resolvì, gracias nuevamente. ;D

dakomt