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

struct maillon_s {
  unsigned short valeur;
  struct maillon_s* suivant;
};
typedef struct maillon_s maillon;

maillon* ajouter_debut(maillon* premier, unsigned short nouveau) {
  maillon* p = (maillon*) malloc(sizeof(maillon*));
  if (p) {
    p->suivant = premier;
    p->valeur = nouveau;
  }
  return p;
}

void creer(maillon** liste, int nombre){
  int i;
  srand(time(NULL));
  *liste=ajouter_debut(*liste, rand()%((999-111)+111));
  for (i=0;i<nombre-1;i++){
    *liste=ajouter_debut(*liste, rand()%((999-111)+111));
  }
  
}

unsigned short grand(maillon* premier){
  unsigned short val;
  val=premier->valeur;
  premier=premier->suivant;
  for(;premier!=NULL;premier=premier->suivant){
    if (val<premier->valeur)
      val=premier->valeur;
  }
  return val;
}

void afficher(maillon* premier) {
  maillon* p;
  for(p = premier; p != NULL; p = p->suivant)
    printf("%d ", p->valeur);
}

void vider(maillon* premier){
  maillon* p;
  maillon* q;
  for(p = premier; p != NULL; p = q){
    q=p->suivant;
    free(p);
  }
  premier=NULL;
}

int main(void){
  int val=10;
  unsigned short plus_grand;
  maillon* liste=NULL;
  creer(&liste,val);
  afficher(liste);
  plus_grand=grand(liste);
  printf("\n%d \n", plus_grand);
  vider(liste);
  return EXIT_SUCCESS;
}