Supprimer dans une liste l'élément passé en paramètre
Bonjour,
Pour un projet que j'ai à réaliser en C, je me sers d'une liste chaînée. J'arrive facilement à supprimer le premier élément de la liste. Mais j'aimerais faire une méthode qui parcours la liste et qui supprime l'élément passé en paramètre.
Je me demande si c'est réalisable avec une liste simplement chaînée ou si je suis obligé de passer par une liste doublement chaînée?
Voici le code qui me pose problème:
Ma structure :
Code:
1 2 3 4 5
| typedef struct listeEntiers
{
int valeur;
struct listeEntiers *prec;
} listeEntiers ; |
Ma méthode pour ajouter :
Code:
1 2 3 4 5 6 7 8
| void AddEntiers(listeEntiers **p, int Val)
{
listeEntiers *element = malloc(sizeof(listeEntiers));
if(!element) exit(EXIT_FAILURE); /* Si l'allocation a échouée. */
element->valeur = Val;
element->prec = *p;
*p = element; /* Le pointeur pointe sur le dernier élément. */
} |
La méthode pour supprimer qui me pose problème : :?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| void DeleteEntier(listeEntiers **sl, int i)
{
listeEntiers *tmp;
listeEntiers *tmp2;
listeEntiers *tmp3;
tmp2=(*sl);
while((*sl) && (*sl)->valeur!=i)
{
(*sl)=(*sl)->prec;
tmp3=(*sl);
tmp2->prec=tmp3;
tmp2=tmp2->prec;
}
tmp = (*sl)->prec;
free(*sl);
tmp2->prec=tmp;
*sl = tmp2;
} |
C'est mon premier projet en C alors je galère un peu!