#include <stdio.h>

typedef struct      s_list
{
    struct s_list   *next;
    void            *data;
}                   t_list;

#include <stdio.h> // pour printf
//#include "ft_list.h"
#include <stdlib.h> // ne pas oublier, est nécessaire
#include <string.h> // pour strcmp

void ft_list_remove_if(t_list **begin_list, void *data_ref, int (*cmp)())
{
    t_list **current = begin_list; // ptr su begin_list, sotck l adresse de begin_list
    t_list *tmp; // un pointeur vers un nœud de la liste.

    while (*current)
        {
            if ((*cmp)((*current)->data, data_ref) == 0)
            {
                tmp = (*current);
                *current = (*current)->next;
                free(tmp);
            }
            else
                current = &(*current)->next;
        }    
}

// transformer strcmp pour que prend en parametre void! il faut caster
int my_cmp(void *a, void *b)
{
    return strcmp((char *)a, (char *)b);
}

// sert a créer un nouveau noeud contenant une donnée et l'initialiser pour pouvoir l'ajouter à une liste chainée
void *creat_elem(void *value)
{
    t_list *new_el;
    new_el = malloc(sizeof(t_list));
    // ne pas oublier de vérifier l allocation de mémoire
    if (new_el == NULL)
        return NULL;
    // ajouter la value
    new_el->data = value;
    // faire que pointe vers null
    new_el->next = NULL;
    // retourner l'adresse du new_el, cela permet d'utiliser ce noeud dans une liste chainée en l'affectant a un ptr (dans main next )
    return (new_el);
}

void print_list(t_list *head)
{
    while (head) // head ptr sur le premier élément de la liste
        {
            printf("value du noeud: %s \n",(char *)head->data);
            head = head->next;
        }
}

int main()
{
    t_list *node; // déclare un ptr node de t_list *
    node = creat_elem("banane"); // ici on fait pointer node ver le premier noeud contnat "banane"
    node->next = creat_elem("bite"); // ajoute les noeud suivant en modifiant le champs next, cela crée une liste chainee ou chaque noeud poute vers le suivant
    node->next->next = creat_elem("citron");

    printf("La liste avant suppression: \n");
    print_list(node);
    ft_list_remove_if(&node, "bite", my_cmp); // il faut donner &node pour pouvoir modifier et supprimer les nodes, "valeur de comparaison", ma fonction de comparaison de type int cmp(void *) 
    printf("La liste après suppression: \n");
    print_list(node);
    return (0);

    
}

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: