Bonsoir, je sollicite une fois encore de votre aide pour un problème de chaînage sur une liste moins classique.

Je vous expose mon problème:
j'ai une simple liste chaîné initialisée le plus simplement possible,
une fonction d'ajout et une fonction d'affichage.

cette liste ce différencie sur l'insertion, je m'explique:
en effet au lieu d'ajouter un l'élément a la fin, au début ou au « next » j'insère à la place de l'élément courant.(je prend l'élément courant je le met au next de l'élément a inserer et je remplace le courant par l'élément a insérer)

lors ce que j'ajoute des l'élément dans un ordre trié (a croissant) il n'y a pas de problème, mais lors ce que j'ajoute en désordre je perd tous les l'élément précédent l'élément ajouté.

je pense que ça vient du *p ) *p->next qui efface les l'élément précédent, mais je ne trouve pas de solution, je vous remercie d'avance

mon 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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
 
 
#include<stdio.h>
#include<stdlib.h>
 
typedef struct list
{
       struct list *next;
       int a;
       int b;
}list;
typedef list s_list;
 
void inserer(s_list **l,int a,int b)
{
	if(*l==NULL)
	{
		s_list *s = malloc(sizeof(s_list));
		s->next = NULL;
		s->a = a;
		s->b = b;
		*l = s;
	}
	else
	{
		while(*l != NULL)
		{
			if((*l)->a == a)
			{
				((*l)->b += b);break;
			}
			if((*l)->a > a && (*l)->next == NULL)
			{
				s_list *s = malloc(sizeof(s_list));
				s->next = NULL;
				s->a = a;
				s->b =b;
				(*l)->next = s;break;
			}
			if((*l)->a < a)
			{
				s_list *s = malloc(sizeof(s_list));
				s->next = *l;
				s->a = a;
				s->b =b;
				*l = s;break;
			}
			else
			{
				*l = (*l)->next;
			}
		}
	}
}
 
 
 
void afficher(s_list *l)
{
	while(l)
	{
		printf("%dX^%d\n",l->b, l->a);
		l = l->next;
	}
}
int main(int argc, char *argv[])
{
       s_list *l= NULL;
       int a = 0;
       int b = 0;
 
 
       while(1)
       {
               printf("un poly ?\n");
               scanf("%d %d",&b,&a);
               inserer(&l,a,b);
               afficher(l);
       }
 
}
petite précision j'ai pas mal passé de temps sur gdd...
mais c'est mes connaissances qui montrent leurs limites