hola q tal, tengo una duda a lo q respecta listas simples en la opcion de borrar, el codigo es el siguiente
Código PHP:
struct Lista{
char Dato;
struct Lista *Siguiente;
}Lista;
typedef enum{false,true}boolean;
enum{insertar=1,borrar,salir};
boolean EstaVacia(struct Lista *);
void Insertar(struct Lista **,char);
char Borrar(struct Lista **,char);
void ImprimeLista(struct Lista *);
void Menu(void);
int main(void)
{
char dato;
int opcion;
struct Lista *Comenzar;
Comenzar=NULL;
Menu();//lama la funcion menu
scanf("%d",&opcion);
while(opcion!=salir){
switch(opcion){
case insertar: printf("\nIntroduce un caracter: ");
scanf("\n%c",&dato);
Insertar(&Comenzar,dato);
ImprimeLista(Comenzar);
getch();
break;
case borrar: if(!EstaVacia(Comenzar)){
printf("\nIntroduce el caracter que deseas borrar: ");
scanf("\n%c",&dato);
if(Borrar(&Comenzar,dato)){
printf("%c ha sido borrado.\n",dato);
ImprimeLista(Comenzar);
}
else printf("%c no se encontro en la lista.\n\n",dato);
}
else printf("La lista esta vacia.\n\n");
getch();
break;
default: gotoxy(30,20);
printf("Opcion Incorrecta.");
getch();
Menu();
break;
}
Menu();
scanf("%d",&opcion);
}
gotoxy(30,24);
printf("Fin de %s",__FILE__);
// sleep(1);
return 0;
}
la parte de borrar
Código PHP:
char Borrar(struct Lista **PtrLista,char dato)
{
struct Lista *Anterior,*Actual,*Temporal;
/*aqui lo q entiendo es q verifica q el dato realmente se encuentre en la lista*/
if(dato==(*PtrLista)->Dato)
{
Temporal=*PtrLista;
*PtrLista=(*PtrLista)->Siguiente;
free(Temporal);
return dato;
}
/*en esta parte es la q ya no comprendo, por q si en el if corroboraba q el dato
introducido por el usuario estuviese en lista
entonces toda esa parte del else q hace ahi */
else
{
Anterior=*PtrLista;
Actual=(*PtrLista)->Siguiente;
while(Actual!=NULL && Actual->Dato!=dato){
Anterior=Actual;
Actual=Actual->Siguiente;
}
if(Actual!=NULL){
Temporal=Actual;
Anterior->Siguiente=Actual->Siguiente;
free(Temporal);
return dato;
}
}
return '\0';
}
Si alguien pudiese explicarme