#include <stdio.h> // pas besoin
#include <stdlib.h>  // ne pas oublier

// #include "ft_list.h"
// (*f)(list_ptr->data);

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

void    ft_list_foreach(t_list *begin_list, void (*f)(void *))
{
    t_list *list_ptr = begin_list; // ici *list_ptr car argument *begin_list on veut que ce soit des ptr sur les noeuds!!!

    while (list_ptr) // ici ptr sur le noeuds
        {
            (*f)(list_ptr->data); // (*f) car aussi déclaré comme ça dans l argument, on accède a la data 
            list_ptr = list_ptr->next;
        }
}

// Fonction à appliquer sur chaque élément (ex: affichage d'un entier)
void print_data(void *data) // void data comme argument car structure est de data est de type void * (générique peut prendre int, char, ...)
{
    printf("%d\n", *(int *)data); // comme on met des int en data il faut ici caster (int *)data, sinon ne peutg pas printf
}

// Fonction pour créer un nouvel élément de la liste
t_list *create_elem(void *data)
{
    t_list *new_elem = malloc(sizeof(t_list));
    if (!new_elem)
        return NULL;
    new_elem->data = data;
    new_elem->next = NULL;
    return new_elem;
}

// Test de la fonction ft_list_foreach
int main()
{
    int a = -10, b = 20, c = 300;

    t_list *elem1 = create_elem(&a); // t_list *elem1 = create_elem('-10'); ne fonctionne pas
    t_list *elem2 = create_elem(&b); // il faut déclarer les variable ensuite passer l adresse 
    t_list *elem3 = create_elem(&c);

    elem1->next = elem2; // ici je lie les élément avant tous on des next->NULL, mtn ils sont linké
    elem2->next = elem3;

    printf("Liste des éléments :\n");
    ft_list_foreach(elem1, print_data);

    // Libération de la mémoire
    free(elem1);
    free(elem2);
    free(elem3);

    return 0;
}

Embed on website

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