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
|
/* Il n'est pas nécessaire d'utiliser un pointeur de pointeur:
un pointeur simple fait tres bien l'affaire ;) */
int dll_findDelete (dll_s *pile, void *data)
{
/* il nous faut un pointeur de travail
qu'on initialise directement sur l'élément passé en parametre */
dll_s *travail= pile;
/* une première boucle qui cherche "en avant" */
while(strcmp(data,travail->data)!=0 && travail !=NULL)
{
travail=travail->next;
}
/* si on n'a pas trouvé l'élément (travail vaut NULL),
on cherche dans l'autre sens */
if(travail==NULL)
{
/* on réinitialise travail sur l'élément passé en parametre
et on cherche "en arriere" */
travail=pile;
while(strcmp(data,travail->data)!=0 && travail !=NULL)
{
travail=travail->next;
}
}
/* Si travail ne vaut pas NULL ici, c'est qu'on a trouvé l'élément...
on le supprime */
if(travail !=NULL)
{
dll_remove(travail);
/* on renvoie la réussite */
return 0;
}
/* si on arrive ici, l'élément n'a pas été trouvé... on renvoie l'échec */
return 1;
} |
Partager