fusion de deux liste simplement chainée
je veux faire fusion de deux liste simplement chaine
a condition que la liste 1 est trier coissant
de meme pour la liste 2
j'ai base sur le principe de la fusion pour le tableau
mais ca ne marche pas
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 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 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
typedef struct noeud
{
int info;
struct noeud *suivant;
}noeud;
typedef struct
{
noeud *tete;
}list;
void init(list *l)
{
l->tete=NULL;
}
void inserer_fin(list *l,int x)
{
noeud *e;
e=(noeud*)malloc(sizeof(noeud));
noeud *parcour=l->tete;
e->info=x;
e->suivant=NULL;
if(l->tete==NULL)
l->tete=e;
else
{
while(parcour->suivant!=NULL)
{
parcour=parcour->suivant;
}
parcour->suivant=e;
}
}
void affiche(list l)
{
noeud *parcour=l.tete;
while(parcour!=NULL)
{
printf("%7d",parcour->info);
parcour=parcour->suivant;
}
}
void fusioner(list *l1,list *l2,list *l3) // le probleme
{
noeud *parcour1=l1->tete;
noeud *parcour2=l2->tete;
noeud *parcour3=l3->tete;
while((parcour1!=NULL)&&(parcour2!=NULL))
{
if(parcour1->info<parcour2->info)
{
parcour3->info=parcour1->info;
parcour3=parcour3->suivant;
parcour1=parcour1->suivant;
}
else
{parcour3->info=parcour2->info;
parcour3=parcour3->suivant;
parcour2=parcour2->suivant;
}
}
while(parcour1!=NULL)
{
parcour3->info=parcour1->info;
parcour3=parcour3->suivant;
parcour1=parcour1->suivant;
}
while(parcour2!=NULL)
{
parcour3->info=parcour2->info;
parcour3=parcour3->suivant;
parcour2=parcour2->suivant;
}
}
void main()
{
int v,n,i,n1,v1;
list l1,l2,l3;
init(&l1);
init(&l2);
init(&l3);
printf(" donner la premiere liste\n :");
printf(" donner les nombres de noeud :");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("donner la valeur :");
scanf("%d",&v);
inserer_fin(&l1,v);
}
printf(" donner la deuxieme liste\n :");
printf(" donner les nombres de noeud :");
scanf("%d",&n1);
for(i=0;i<n1;i++)
{
printf("donner la valeur :");
scanf("%d",&v1);
inserer_fin(&l2,v1);
}
fusioner(&l1,&l2,&l3);
affiche(l3);
} |
pouvez m'aidez