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

struct maillon
{
	int valeur;
	struct maillon* suivant;
};

typedef struct maillon maillon;

unsigned short int estVide(maillon* liste)
{
	return(liste == NULL);
}

maillon* debut(maillon* m, int v)
{
	maillon* result = malloc(sizeof(maillon));
	result->valeur = v;
	result->suivant = m;
	return result;
}

maillon* creerListe()
{
	maillon* m = NULL;
	unsigned short int val;
	srand(time(NULL));
	for(int i = 0; i<10; i++)
	{
		val = rand()%(999-111)+111;
		m = debut(m,val);
	}
	return m;
}

maillon* afficheListe(maillon* liste)
{
	maillon* lecture = liste;
	while(!estVide(lecture))
	{
		printf("%hu\n",lecture->valeur);
		lecture = lecture->suivant;
	}
}

maillon* destructListe(maillon* liste)
{
	maillon* lecture = liste;
	while(lecture != NULL){
		maillon* temp = lecture;
		lecture = lecture->suivant;
		free(temp);
	}
	printf("liste effacer\n");
}

maillon* rotationListe(maillon* m)
{
	maillon *lecture=malloc(sizeof(maillon));
	maillon *temp=lecture;
	lecture=m;
	while(lecture->suivant!=NULL){
		temp=lecture;
		lecture=lecture->suivant;
	}
	temp->suivant=NULL;
	lecture->suivant=m;
	return lecture;
}

maillon* rotationListeInverse(maillon* m)
{
	maillon *debut=m;
	maillon *fin=m;
	debut=m->suivant;
	maillon *lecture=m;
	while(!estVide(lecture->suivant)){
		lecture=lecture->suivant;
	}
	fin->suivant=NULL;
	lecture->suivant=fin;
	return debut;
}

int main(int argc, char const *argv[])
{
	maillon* l;
	int rotation, i;
	for(i = 0 ; i<10; i++){
		l = creerListe(l);
	}
    afficheListe(l);
    printf("Choisissez une rotation : ");
    scanf("%d", &rotation);
    if(rotation == 0){
    	printf("aucune rotation !");
    }
    if(rotation > 0){
    	for(i = 0 ; i<rotation ; i++){
    		l=rotationListe(l);
    	}
    }else if(rotation < 0){
    	for(i = 0 ; i>rotation ; i--){
    		l=rotationListeInverse(l);
    	}
    }
    afficheListe(l);
    destructListe(l);
	return 0;
}