Exercice : Suppression version 2
Le code précédent ci-dessous supprime une valeur présente dans la liste. Modifiez-le pour tenir compte du cas où la valeur n'est pas présente dans cette liste.
Le test de la boucle nécessite une condition supplémentaire. À la suite de la recherche, la libération se fait si l'élément est trouvé.
1
void supprimer(Tliste *ptliste, int i){
2
Tliste *ptl=ptliste ;
3
Tliste ptaux ; // pointeur auxiliaire pour suppression de l'élément
4
while(*ptl !=NULL && (*ptl)->val!=i) // parcours jusqu'à ptl pointe sur l'élément i ou liste vide
5
ptl=&(*ptl)->lien ;
6
if(*ptl){ // la valeur est-elle trouvée ?
7
ptaux=*ptl ;
8
*ptl=ptaux->lien ; // sortie de l'élément pointé par ptaux de la liste
9
free(ptaux); // libération de la zone mémoire allouée
10
}
11
return ;
12
}
void supprimer(Tliste *ptliste, int i){ Tliste *ptl=ptliste ; Tliste ptaux ; // pointeur auxiliaire pour suppression de l'élément while(*ptl !=NULL && (*ptl)->val!=i) // parcours jusqu'à ptl pointe sur l'élément i ou liste vide ptl=&(*ptl)->lien ; if(*ptl){ // la valeur est-elle trouvée ? ptaux=*ptl ; *ptl=ptaux->lien ; // sortie de l'élément pointé par ptaux de la liste free(ptaux); // libération de la zone mémoire allouée } return ; }