enlever une variable dans une liste chaînée
Bonjour à tous,
Etant en train de tenter de comprendre les notions de "liste chaînée" (il faut bien un début à tout ;) ) et malgré quelques lacunes, j'arrive un peu à sortir la tête hors de l'eau. J'ai pour l'instant créer une fonction permettant d'ajouter un élément en fin de liste sans trop de soucis. Par contre, j'essaie désespérément de créer une fonction permettant de supprimer un élément en fonction d'une variable et là, c'est le drame.
Voici donc la fonction en question :
Code:
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
| struct node {
char *key;
char *value;
char *option;
struct node *p_next;
};
// le code étant assez sommaire ...
struct node *remove_item (struct node *p_head, char *key, char *value, char *option)
{
struct node *p_item = p_head;
while (p_item->p_next != NULL)
{
/* si la variable est dans la liste, supprime */
if (!strcmp(p_item->key, key))
{
free(p_item);
p_item = p_item->p_next;
}
else
{
p_item = p_item->p_next;
}
}
return p_item;
} |
Supposont que dans mon main(), j'ai ceci :
Code:
1 2 3 4 5 6 7 8
|
[...] // partie du code pas trop intéressante
p_head = add_item (p_head, "directory", "/root", "\0x08");
p_head = add_item (p_head, "shell", "/bin/sh", "\0x08");
p_head = add_item (p_head, "test", "0", "\0x08");
p_head = remove_item (p_head, "test", NULL, NULL); |
Je devrais obtenir une liste avec uniquement les variables "directory", "shell" (la variable "test" étant enlevée).
Au lieu de cela, j'obtiens
Citation:
# ./a.out
test = 0
#
Ce qui correspond à la dernière variable. Ce que je tente de faire est-il possible ? Je n'ai pas l'impression d'avoir un algorithme complètement nul par contre je ne vois pas où peut se poser le problème.
Des idées sur le(s) problèmes(s) ?