Liste chainées en C

Bonjour,
J'essaie de créer une liste chainée qui contiendrait les valeurs de 1 à 9. J'ai réussis à créer la liste pour qu'elle contienne les valeurs, le problème est que quand j'affiche la chaîne, j'obtiens un 0 à la fin de celle ci et le programme plante après l'affichage. Je poste donc mon code, si quelqu'un trouve un problème, qu'il me fasse signe svp ^^

#include <stdio.h>
#include <stdlib.h>
typedef struct element element;
struct element
{
int val;
struct element *suivant;
};
typedef element* liste;

main()

{
liste creer_elt(int val)
{
liste P;
P=(liste)malloc(sizeof(element));
P->val=val;
P->suivant=NULL;
return P;
}
liste ajout_en_tete(liste L, int val)
{
liste P=creer_elt(val);
P->suivant=L;
return P;
}
int i;
liste llist;
for (i=9; i>0; i--)
{
llist=ajout_en_tete(llist, i);
}

void afficherListe(liste llist)
{
element *tmp = llist;
/* Tant que l'on n'est pas au bout de la liste */
while(tmp != NULL)
{
/* On affiche */
printf("%d ", tmp->val);
/* On avance d'une case */
tmp = tmp->suivant;
}
}
afficherListe (llist);
}

7 réponses

  • Votes
  • Date
  • Date décroissante
  1. Pourquoi pas?
    1. Contributeur
      c'est pas propre et les derniers standard C sont sensé l'interdire.
      En plus, ça fait un code pas très lisible, surtout qu'en plus tu n'utilises pas les balises de code pour conserver l'indentation.
  2. Je viens de tester et sa ne change rien, j'ai toujours le 0 en trop et le programme qui plante ensuite.
    1. Contributeur
      je crois avoir trouvé.
      essais de déclarer ainsi :
      liste llist=0;