HOLA COMPAÑEROS PROGRAMADORES!!!!
ESPERO Y PUEDAN AYUDARME, EL PROBLEMA QUE ME HA TENIDO VARIAS HORAS SENTADO FRENTE A LA PC SIN PODER RESOLVER ES DEL TEMA DE LISTAS, EN EL CUAL SE PIDE LOCALIZAR UN ELEMENTO PARA DESPUES ELIMINAR UNO ANTERIOR,
HASTA AHORA SOLO HE LOGRADO QUE ELIMINE EL PRIMERO CORRECTAMENTE PERO AL TOMAR UN VALOR DIFERENTE QUE NO SEA EL SEGUNDO ME ELIMINA EL MISMO DE REFERENCIA Y PUES YA LE HE DADO VUELTAS AL ASUNTO PERO NO DOY CON LA CORRECCION.
A MI PARECER Y DONDE PIENSO QUE ESTA EL ERROR ES EN LA PARTE DE LETRAS ROJAS YA QUE ES DONDE ELIMINO EL NODO DE REFERENCIA.
ESPERO Y PUEDAN AYUDARME.....
#include <iostream.h>
#include <stdlib.h>
#include <conio.h>
typedef struct listas
{
int dat;
struct listas *liga;
}zx;
int main()
{
zx *p; //variable apuntador
zx *q; //variable apuntador
zx *t; //Auxiliar apuntador
int i,nuevo;
p = new zx; //creamos un nodo de zx
p->dat= 35; //damos el valor de L en su parte dato como 35
p->liga = NULL; //L en su parte liga apunta a NULL
t = p; //T Y L APUNTAN AL INICIO
for(i = 30; i >= 5; i -= 5)
{
/* Reserva memoria para un nodo */
t->liga= new zx; //SE CREA P
t=t->liga;
t->dat = i; //introduce la informacion
t -> liga = NULL; //reorganiza
}
t=p;
cout<<"\nLa lista que se encuentra es: \n";
while(t != NULL) //MIENTRAS t sea diferente de NULL
{
cout<<t->dat<<"->"; //IMPRIME EL DATO
t = t->liga; //MIENTRAS T=T EN SU PARTE LIGA
}
cout<<"NIL";//Y AL FINAL PON A NIL
cout<<endl<<endl;
cout<<"Cual es el elemento dado como referecncia ";
//TODA LA PARTE ANTERIOR A MI PARECER ESTA BIEN
int h=0;
t=q=p;
cin>>nuevo;
//******************
if(p==NULL)
cout<<"\nlista sin elementos\n";
else if(p->dat==nuevo)
{
cout<<"\n...NO EXISTE NODO ANTERIOR...\n";
}
else if(p->liga->dat==nuevo)
{
t=p;
p=p->liga;
delete t;
}
else
{
do
{
if(t->liga->dat==nuevo)
{
h++;
break;
}
t=t->liga;
}while(t->liga!=NULL);
printf("%d \n",t->dat);
if(h==1)
{
q=t;
t=t->liga;
q->liga=t->liga;
delete t;
cout<<"nodo eliminado \n";
}
else
cout<<"\nELEMENTO NO ENCONTRADO \n";
}
q=p;
cout<<"\nLa lista que se encuentra es: \n";
while(q != NULL) //MIENTRAS t sea diferente de NULL
{
cout<<q->dat<<"->"; //IMPRIME EL DATO
q = q->liga; //MIENTRAS T=T EN SU PARTE LIGA
}
cout<<"NIL";//Y AL FINAL PON A NIL
cout<<endl<<endl;
getch();
return 0;
}