#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>

struct Knoten
{
	char Ziffer;
	struct Knoten *Nachfolger;
	struct Knoten *Vorgaenger;
};

/*--------------------------------------*/

struct Listenkopf
{
	struct Knoten *anfang;
	struct Knoten *ende;
};


/*--------------------------------------*/



struct Listenkopf *Listeanlegen(void)
{
	struct Listenkopf *kopf=(struct Listenkopf*)(malloc(sizeof(struct Listenkopf)));
    
	if(kopf)
	{
		kopf->anfang=0;
		kopf->ende=0;
		return(kopf);
	}
    
	return(0);
}


/*--------------------------------------*/



int Anhaengen(struct Listenkopf *kopf, char ziff)
{
	struct Knoten *haengean=(struct Knoten*)(malloc(sizeof(struct Knoten)));
   
	if(haengean)
	{
		haengean->Ziffer=ziff;
		haengean->Nachfolger=0;
		haengean->Vorgaenger=kopf->ende;
     
		if(!(kopf->anfang))
		{
			kopf->anfang=haengean;
			kopf->ende=haengean;
		}
		else  
		{
			kopf->ende->Nachfolger=haengean;
			kopf->ende=haengean;
		}    
		return(1);
	}
   
	return(0);
}



/*--------------------------------------*/


void VorwaertsAnzeigen(struct Listenkopf *kopf)
{
	struct Knoten *aktuell=kopf->anfang;
  
	if(!aktuell)
	{
		printf("Sie hatten keine Zahl eingegeben.\n"); 
		return;
	}
    
	printf("Ihre eingegebene Zahl:\n");
	while(aktuell)
	{ 
		printf("%c",aktuell->Ziffer); 
		aktuell=aktuell->Nachfolger;
	}
    
	printf("\n");
	return;
}



/*--------------------------------------*/


void RueckwaertsAnzeigen(struct Listenkopf *kopf)
{
	struct Knoten *aktuell=kopf->ende;
  
	if(!aktuell)
	{
		printf("Sie hatten keine Zahl eingegeben.\n"); 
		return;
	}
    
	printf("Ihre eingegebene Zahl, rueckwaerts ausgegeben:\n");
	while(aktuell)
	{ 
		printf("%c",aktuell->Ziffer); 
		aktuell=aktuell->Vorgaenger;
	}
    
	printf("\n");
	return;
}



/*--------------------------------------*/


void Loeschen(struct Listenkopf *kopf)
{
	struct Knoten *aktuell=kopf->anfang, *nachf;
  
	while(aktuell)
	{ 
		nachf=aktuell->Nachfolger;
		free(aktuell);
		aktuell=nachf;
	}
     
	free(kopf);
	return;
}


/*--------------------------------------*/

int main(void)
{
	struct Listenkopf *liste;
	char eingabe='0';
  
	liste=Listeanlegen();
  
	printf("Sie koennen nun eine beliebig lange natuerliche Zahl ziffernweise von links nach rechts eingeben.\n\
Die Eingabe jeder Ziffer schliessen Sie mit der \"return\"-Taste ab.\nSobald Sie ein anderes Zeichen eingeben, wird die Eingabe beendet.\n");
  
	while(isdigit(eingabe) )
	{
		scanf("%c",&eingabe);
		getchar();
		if(isdigit(eingabe) )
		{
			if(!(Anhaengen(liste,eingabe)))
			{
				printf("Ziffer konnte nicht geschrieben werden.\n");
			}
		}
	}
  

	VorwaertsAnzeigen(liste);
	RueckwaertsAnzeigen(liste);
	Loeschen(liste);
  
	return(0);
  
}
