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 :
Ma méthode pour ajouter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 typedef struct listeEntiers { int valeur; struct listeEntiers *prec; } listeEntiers ;
La méthode pour supprimer qui me pose problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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. */ }
C'est mon premier projet en C alors je galère un peu!
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 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; }
Partager