Perdon por mi estupidez pero estoy encerrado en el problema y no encuentro la p... salida, estoy es deprimente
, lo mejor de todo que esto ya lo hize en su dia.
Haber, me sigue petando lo mismo, cuando borro algun nodo que no se el primero al imprimir la lista me peta, tambe me pasa algo raro, cuando borro un nodo y quiero imprimir solo el primero ya que me salen caracteres extraños.
Código:
void afegirDNS(char dominio[20])
{
NodeDNS *Aux;
Aux=(NodeDNS *)malloc(sizeof(NodeDNS));
strcpy(Aux->nombre,dominio);
Aux->DNSseguent=NULL;
if(PrimerNode==NULL)
{
PrimerNode=Aux;
UltimNode=Aux;
}
else
{
UltimNode->DNSseguent=Aux;
UltimNode=Aux;
}
}
void printarLlistaDNS()
{
NodeDNS *Temp;
Temp=PrimerNode;
while(Temp)
{
printf("%s ->", Temp->nombre);
Temp=Temp->DNSseguent;
}
printf("NULL\n");
}
void printarprimer()
{
if (PrimerNode!=NULL)
{
printf("El primer node es: %s\n\n",PrimerNode->nombre);
}
else
{
printf("Llista buida");
}
}
void printarultim()
{
if (UltimNode!=NULL)
{
printf("El ultim node es: %s\n\n",UltimNode->nombre);
}
else
{
printf("Llista buida");
}
}
void eliminarNode(char dominio[20])
{
NodeDNS *Actual;
NodeDNS *Anterior;
Actual=PrimerNode;
Anterior=NULL;
while(Actual)
{//cicle
if(strcmp(Actual->nombre,dominio)==0)//Hemos encontrado el elemento a eliminar
if(!Anterior) //Es el primer node de la llista
{
PrimerNode=Actual->DNSseguent;
}
else
{ //Si no es el primer node
Anterior->DNSseguent = Actual->DNSseguent;
UltimNode=Anterior;
}
//allibera
free(Actual);
//surt del cicle
break;
}
Anterior = Actual;
Actual = Actual->DNSseguent;
}
void main()
{
int opcion=0;
char dominio[20];
while(1)
{
printf("\n1- A");
printf("%c",164);
printf("adir DNS: \n\n");
printf("2- Printar primer element\n\n");
printf("3- Printar ultim element\n\n");
printf("4- Printar tots els elements\n\n");
printf("5- Eliminar un domini\n\n");
printf("Seleccione una opcion: ");
scanf("%d",&opcion);
printf("\n\n");
switch(opcion)
{
case 1: printf("Introdueix el nom de domini: ");
scanf("%s",dominio);
afegirDNS(dominio);
break;
case 2: printarprimer();
break;
case 3: printarultim();
break;
case 4: printf("\n");
printarLlistaDNS();
break;
case 5: printf("Introdueix el domini que vols eliminar: ");
scanf("%s",dominio);
eliminarNode(dominio);
break;
}
}
system("Pause");
}
Te pongo todo el codigo, tengo que tener algun puntero mal referenciado pero no encuentro el fallo.
Saludos