Parce que si l'allocation échoue, il n'y rien à faire ni à changer
Ce qui se passe est simplement :
on veut ajouter un élément dans la liste :
- on tente d'allouer un élément
- si cela échoue, on ne fait rien
- si cela réussit :
-- on rempli les champs
-- si la liste est vide, on y installe le premier élément
-- si la liste est non vide, on va juste mettre à jour le pointeur "suivant" du dernier élment déjà stocké.
C'est juste un pointeur temporaire , permettant d'une part de ne pas faire de crash, et secondo de récupérer l'adrese du dernier élement de la liste.
Comme faire "liste->premier_maillon->suivant" ne t'amènera qu'au suivant, tu ne peux pas faire un truc itératif.. Le seul moyen de le faire est d'abstractiser "liste->premier_maillon" pour le rendre comme les autres maillons. D'où le "elt"..
@Médinoc : le problème est qu'il passe un objet et non un maillon, ce qui complexifie un peu par rapport à ta solution.. MAintenant, que tu en fasses une fonction sépparée ou que tu mettes directement dans le code, bof... D'autre part dans ton code tu ne mets pas à jour la liste ;).. De plus, ton while ne donnera pas le bon résultat : le dernier de la liste est non null, donc tu passes dans le while.. On fait donc suivant.. Donc NULL. Et c'est la valeur qu'on renvoie.. :P En fait il faut mettre while ( maillon->suivant != NULL )
@diogene : je suis d'accord, mais vu qu'il n'avait qu'un seul pointeur, tu modifies sa spec.. ;)