Aucun retour pour création de liste chainée
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:
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:
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:
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;
} |