Ver Mensaje Individual
  #8 (permalink)  
Antiguo 27/02/2013, 09:32
Macas
 
Fecha de Ingreso: noviembre-2012
Mensajes: 136
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Printar lista enlazada

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