Liste simplement chaine

Bonjour,

j'ai deux liste d'entier qui sont trier (coissant)

je veux faire fusion de deux liste dans une nouvelle liste

j'execute le code suivant mais a l'execution il se bloque

le principe de fusion je suppose qu'il est juste

#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 insertion_fin(list *l,int y)
{
noeud *e;
e=(noeud*)malloc(sizeof(noeud));
noeud *parcour =l->tete;
e->info=y;
e->suivant=NULL;
if(l->tete==NULL)
{
l->tete=e;
}
else
{
while(parcour->suivant!=NULL)
{
parcour=parcour->suivant;
}
parcour->suivant=e;
}
}

void fusioner(list *l1,list *l2,list *l3)
{
noeud *parcour1=l1->tete;
noeud *parcour2=l2->tete;
noeud *parcour3=l3->tete;

while((parcour1!=NULL)&&(parcour2!=NULL))
{
if(parcour1->info<parcour2->info)
{
insertion_fin(l3,parcour1->info);

parcour1=parcour1->suivant;
}
else
{
insertion_fin(l3,parcour2->info);

parcour2=parcour2->suivant;
}
}
while(parcour1!=NULL)
{
insertion_fin(l3,parcour1->info);

parcour1=parcour1->suivant;
}
while(parcour2!=NULL)
{
insertion_fin(l3,parcour2->info);

parcour2=parcour2->suivant;
}
}

void afficher(list l)
{
noeud *parcour =l.tete;
while(parcour!=NULL)
{
printf("%7d",parcour->info);
parcour=parcour->suivant;
}

}

void main()
{
list l1,l2,l3;
int n,v,n2,x,i
;
init(&l1);
init(&l2);
printf("\n donner la premiere liste\n\n");
printf("donnez le nombre des noeuds a inserer :");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("donnez une valeur : ");

scanf("%d",&v);
insertion_fin(&l1,v);
}

printf("\n donner la deuxieme liste\n\n");
printf("donnez le nombre des noeuds a inserer :");
scanf("%d",&n2);
for(i=0;i<n2;i++)
{
printf("donnez une valeur : ");

scanf("%d",&x);
insertion_fin(&l2,x);
}

fusioner(&l1,&l2,&l3);

afficher(l3);

getch();
}

merci d'avance
Configuration: Windows XP
Firefox 3.5.7

3 réponses

  1. apres entrer les valeur de deux liste

    et quand je tape il "se bloque"

    donc soit un probleme au niveau de la fonction fusion soit un syntaxe est errone

    je suppose que le deux liste l1 et l2 devront etre envoyer par valeur non comme pointeur

    pouvons voir le code de la fonction fusion
    1. voila l'erreur

      Thread 1 stopped C:\Documents and Setting\ayken\Bureau\test.exe:Fault:access violation at 0x4010b2:read of address 0x83ec8b59