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

struct maillon {
	unsigned short valeur;
	struct maillon* suiv;
};

typedef struct maillon maillon;

maillon* ajouteDebut(maillon *chaine, unsigned short entier){
	maillon *nouveauMaillon=malloc(sizeof(maillon));
	nouveauMaillon->valeur=entier;
	nouveauMaillon->suiv=chaine;
	return nouveauMaillon;
}

maillon* retireDebut(maillon *chaine){
	maillon *premierMaillon=malloc(sizeof(maillon));
	maillon *nouvelleChaine=malloc(sizeof(maillon));
	premierMaillon=chaine;
	nouvelleChaine=premierMaillon->suiv;
	premierMaillon->suiv=NULL;
	free(premierMaillon);
	return nouvelleChaine;
}

void ajouterFin(maillon *chaine, unsigned short entier){
    maillon *nouveauMaillon=malloc(sizeof(maillon));
    nouveauMaillon->valeur=entier;
    nouveauMaillon->suiv=NULL;
    maillon *parcourir=malloc(sizeof(maillon));
    parcourir=chaine;
    while(parcourir->suiv!=NULL){
        parcourir=parcourir->suiv;
    }
    parcourir->suiv=nouveauMaillon;
}

void retireFin(maillon *chaine){
	maillon *parcourir=malloc(sizeof(maillon));
	maillon *precedent=malloc(sizeof(maillon));
	precedent->suiv=NULL;
	parcourir=chaine;
	while(parcourir->suiv!=NULL){
		precedent=parcourir;
		parcourir=parcourir->suiv;
	} precedent->suiv=NULL;
	free(parcourir);
	free(precedent);
}

void afficheListe(maillon *chaine){
	maillon *affichage=malloc(sizeof(maillon));
	affichage=chaine;
	while(affichage->suiv!=NULL){
		printf("%hu ",affichage->valeur);
		affichage=affichage->suiv;
	} printf("\n\n");
	free(affichage);
}

int main() {
	int i;
	maillon *liste=malloc(sizeof(maillon));
	srand(time(NULL));

	putchar('\n');
	liste->valeur=(rand()%889)+111;
	liste->suiv=NULL;
	for(i=0;i<10;i++){
		unsigned short v=(rand()%889)+111;
		liste=ajouteDebut(liste, v);
	} printf("Les valeurs de la liste sont :\n");
	afficheListe(liste);
	unsigned short v=(rand()%889)+111;
	ajouterFin(liste, v);
	printf("Les valeurs de la liste sont :\n");
	afficheListe(liste);
return 0;
}