Bonjour à tous,
Dans un programme, je dois insérer des valeurs dans une liste chainée ordonnée (croissante). Je vous poste la partie de mon programme qui ne marche pas. Il doit s'agir d'une erreur très bête aussi excusez-moi de ne pas la voir.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
main.c
 liste_reservation *R=malloc(200 * sizeof(liste_reservation));
 int saisie;
float arrivee;
(...)
 
 
do {
scanf("%d", &saisie);
(...)
scanf("%f",&arrivee);       
         R=reserver(R,currenttime,arrivee);
         afficher(R);
   }
while (saisie!=4);
free(R) ;
return 0;
}
 
liste.c 
 
liste_reservation *  reserver(liste_reservation * l, float currenttime, float arrivee){
(...)
 l=inserer(arrivee,l);
return l;
}
 
 
liste_reservation * inserer(float arrivee, liste_reservation *l){
   liste_reservation * new=malloc(sizeof(liste_reservation));
   new->aterrissage=arrivee;
   if (l->size==0) {
      new->suivant=NULL;
      new->size=1;
      l=new;
   }
   else if (arrivee>=l->aterrissage) {
      new->suivant=l;
      new->size=l->size+1;
      l=new;
   }
   else {
      liste_reservation *tmp1=l;
      liste_reservation *tmp2=l->suivant;
      while ((tmp2!=NULL)&&(arrivee>tmp2->aterrissage)) {
         tmp1->size++;
         tmp1=tmp2;
         tmp2=tmp2->suivant;
//on "remonte" la liste
}
      tmp1->suivant=new; //insertion du nouvel élément à partir des 2 tmp
      new->suivant=tmp2;
   }
   return l;
}
 
void afficher(liste_reservation *l) { //parcourt la liste pour afficher les heures réservées
   liste_reservation *temp=l;
   while (temp != NULL){
      printf ("%.2f ", temp->aterrissage);
      temp = temp->suivant;
  }
}
je saisis ma valeur d'arrivee dans le main dans la chaine nulle (1ere itération), tout se passe bien... la fonction afficher me renvoie bien la valeur que j'ai saisi dans la chaine... Le probleme est après : je refais la meme chose, mais la 2e valeur a écrasé la 1ere dans le 1er maillon de la chaîne, or je ne vois pas pourquoi ma fonction inserer() ne crée pas - comme je le souhaiterai - un autre maillon pour stocker la 2e valeur (mon R=reserver() serait il en cause?...)
Vous avez une idée?
merci