Bonjour à tous,

J'essaye actuellement de coder une fonction supprimant la première instance d'une valeur passé en paramètre sur une liste chaînée.

Voici mon code :

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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
 
typedef struct cell
{
    void *donnee;
    struct cell *next;
} cell;
 
 
typedef struct liste
{
    cell *first; // Une liste est caractérisé par une cell de tête et de queue
    cell *last;
} liste;
 
 
int suppression_premiere_instance(liste *l, void *valeur)
{
    cell *curr = l -> first; //curr est la première cellule
    cell *prev; //on crée une cellule prev
	if (l -> first == NULL) //cas si la liste est vide
	{
	    return 0;
	}
	else if (curr -> donnee == valeur) //cas si la valeur recherchée est au début de la liste
	{
	    l -> first = curr -> next;
	    free(curr);
	    return 1;
	}
    while ((curr -> next) != NULL) //autre cas. Tant qu'on est pas arrivé au bout de la liste
    {
       if (curr -> donnee == valeur) //si la valeur de la cellule est égale à la valeur recherchée
        {
            prev -> next = curr -> next; //on fait pointer prev vers la cellule pointé par curr
            free(curr); //on libère la cellule courante
            return 1;
        }
    curr = curr -> next; //on avance dans la liste
    }
}
Ca compile correctement mais ça ne fonctionne pas, je ne comprend pas vraiment pourquoi. Un coup de pouce ?

Cordialement,

KhaaB