hola a toda la comunidad. el profesor de mi universidad nos dio el codigo de una lista encadenada y a nosotros nos toca implementar la funcion eliminar(), que elimina el nodo correspondiente a una clave previamente ingresada. el problema que tengo es que cuando intento eliminar el unico nodo de la lista se produce un error en tiempo de ejecucion (violacion de segmento). aqui les muestro algo de codigo.
Código:
void Lsec::eliminar()
{
int clave;
char resp;
nodo *anterior;
nodo *apunt;
nodo *ultimo;
if (inicial==NULL)
{
cout<<"La lista esta vacia, no hay nodo que eliminar"<<endl;
}
else
{
cout<<"Ingrese la clave del nodo a eliminar: ";
cin>>clave;
if(inicial->dato==clave)
{
if (inicial->sig!=inicial)
{
ultimo=buscarUltimo();
apunt=inicial;
inicial=inicial->sig;
ultimo->sig=inicial;
delete apunt;
}
else //AQUI es donde se presenta el error creo
{ //borra el unico nodo que queda
inicial->sig=NULL;
apunt=inicial;
inicial=NULL;
delete apunt;
}
}
else
{
anterior=buscarLista(clave);
if (clave>inicial->dato && anterior->sig->dato==clave )
{
apunt=anterior->sig;
if (anterior->sig->sig!=inicial)
{
anterior->sig=anterior->sig->sig;
}
else
{
anterior->sig=inicial;
}
delete apunt;
}
else
{
cout<<"El nodo a eliminar no existe"<<endl;
}
}
}
}
si alguien me puede ayudar, le estaré muy agradecido.
gracias