bonjour à tous. Je suis entrain de faire des exercices sur les listes chainées, mais j'avoue qu'il y a quelque chose que je n'ai pas bien compri. J'ai fais un code à mo avis très simple d'insertion d'entiers dans une liste ordonée mais je ne sais pas vraiment à quel niveau se trouve le problème, j'ai une erreur du type "segentation fault", donc un problèmr de pointeurs j'immagine. je vous poste le code et voir si vous pourriez me donner un coup de main. Je suis ouvert à tous les critiques et suggestions,..merci d'avance
voici mon type Liste
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
typedef struct Liste{
 
	int valeur; //champ données
	struct Liste *suiv; //pointeur vers l'élément suivant
 
} Liste;
puis le code
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
void insererEnOrdre(Liste **tete, int x){
 
	Liste *p, *pp, *nouvelElement;
 
	p = *tete;
	pp = p;
	//printf("(x, tete.val) = (%d , %d )\n", (*tete)->valeur, x);
	if(*tete == NULL){
				printf("1 ");
		ajouterEnTete(tete, x);
	}else{
		while(p!=NULL && x > p->valeur){
			pp = p;
			p = p->suiv;
		}
		if(p!=NULL && x == p->valeur){
			//on insert pas x ici, mais on peut bien choisir de l'inserer aussi
			//dans ce cas on le fais dans le cas précédent
			printf("%d existe déjà ",x);
			return;
		}else{
			nouvelElement = malloc(sizeof(Liste));
			nouvelElement->valeur = x;
			if(p!=NULL && x < p->valeur){
				//insertion de x avant p et après pp 
				nouvelElement->suiv = p;
				pp->suiv = nouvelElement;
			}else{
				//insertion en queue
				//nouvelElement->suiv == NULL;
				pp->suiv = nouvelElement;
			}
		}
	}
 
}
et mon main

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
#include <stdio.h>
#include <stdlib.h>
 
 
#include "ListeChaineeSimple.h"
 
 
int main(void){
 
	Liste *maListe = NULL;
 
	insererEnOrdre(&maListe, 60);
	insererEnOrdre(&maListe, 20);
	insererEnOrdre(&maListe, 15);
	insererEnOrdre(&maListe, 100);
	insererEnOrdre(&maListe, 15);
	insererEnOrdre(&maListe, 10);
 
	afficher(maListe); 
 
return EXIT_SUCCESS;
}