Bonjour bonjour, je débute en C et je suis confronté a un problème a propos de pointeurs et de liste chainées.

Ma structure de liste chainée est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
typedef struct NoeudMot{
    char mot[29];
    struct NoeudMot *suivant;
} NoeudMot;
J'ai développée une fonction créant une liste chainée de mots, utilisant un pointeur sur mon type NoeudMot :

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
NoeudMot* creerListeMot(NoeudMot *listeMot, Noeud *liste) {
    Noeud *temp = liste;
    NoeudMot *templisteMot = NULL;
    listeMot =templisteMot;
    int i
    while (temp != NULL) {
        if (estDelimiteur(temp->caractere) == 1) {
            if (templisteMot != NULL) {
                templisteMot->mot[i] = '\0';
                templisteMot = templisteMot->suivant;
            }
        }
        else {
            if (templisteMot == NULL) {
                templisteMot = malloc(sizeof(NoeudMot));
                templisteMot->suivant = NULL;
                i = 0;
                }
            templisteMot->mot[i] = temp->caractere;
            i++;
        }
    temp = temp->suivant;
    }
    return listeMot;
}
Seulement, listeMot est censé contenir la première structure de ma liste, or je l’initialise a NULL et n'est plus modifiée après.
Comment retourner la tête de la liste de mots créée ?


[EDIT]: J'ai réussi en recodant ma fonction comme les méthodes classiques de création de listes chainées ce qui donne :
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
41
42
43
44
45
46
47
48
49
50
51
52
NoeudMot* creerListeMot(NoeudMot *listeMot, Noeud *liste) {
    Noeud *temp = liste;
    char chaine[30] = "";
    int i;
    while (temp != NULL) {                                          //Tant qu'il reste des caracteres dans la liste
        if (estDelimiteur(temp->caractere) == 1) {              //Si le carac est un délimit
            if (strcmp(chaine, "") != 0) {                  //Et si la chaine est remplie de caracteres
                chaine[i] = '\0';                           //On finalise la chaine
                listeMot = ajouterfinMot(listeMot, chaine); //On l'ajoute a la liste de Mots
                memset(chaine, 0, sizeof(chaine));                            // On vide la chaine
            }
        }
        else {                                                      // Sinon si le carac est une lettre
            if (strcmp(chaine, "") == 0) {                       //Et si la chaine est vide
                i = 0;          //On met l'indice a 0
            }
            chaine[i] = temp->caractere; //On rentre la lettre
            i++;                         //On décale l'indice
        }
    temp = temp->suivant; //On décale le carac
    }
    return listeMot;
}
 
/* Ajout d'un noeud en fin de liste
   et renvoie la tete de liste */
NoeudMot *ajouterfinMot(NoeudMot *teteliste, char chaine[30]) {
    if (teteliste == NULL) {
        teteliste = ajouterteteMot(teteliste, chaine);
    } else {
        NoeudMot *temp = NULL;
        temp = teteliste;
        while (temp->suivant != NULL) {
            temp = temp->suivant;
        }
        NoeudMot *nouveauNoeudMot = (NoeudMot*)malloc(sizeof(NoeudMot));
        strcpy(nouveauNoeudMot->mot, chaine);
        nouveauNoeudMot->suivant = NULL;
        temp->suivant = nouveauNoeudMot;
    }
    return teteliste;
}
 
/* Ajout d'un noeud en tete de liste
   et renvoie la nouvelle tete de liste */
NoeudMot *ajouterteteMot (NoeudMot *teteliste, char chaine[30]) {
    NoeudMot *nouveauNoeudMot = (NoeudMot*)malloc(sizeof(NoeudMot));
    strcpy(nouveauNoeudMot->mot, chaine);
    nouveauNoeudMot->suivant = teteliste;
    teteliste = nouveauNoeudMot;
    return teteliste;
}