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.
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;
}
}
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
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
me alegro entonces ;)