bleuarff, là, tu ne crées rien du tout... Tu ne fais que jouer avec les pointeurs, rien de plus.
En clair, tu fous le bordel dans tes deux listes .
Essaie plutôt ça, je l'ai testé et ça fonctionne:
Code :
- void fusion( ptr_elem p, ptr_elem q, ptr_elem &liste)
- {
- if (p == NULL)
- {
- if (q == NULL) liste = NULL;
- else liste = p;
- }
- else if (q == NULL) liste = q;
- else // si les 2 listes sont définies
- {
- Elem *l = new Elem (0,NULL); // en considérant que ton constructeur est "Elem (nb, suiv)"
- liste = l;
- while ( (p!=NULL) && (q!=NULL) ) // parcours alterné des 2 listes
- {
- if (p->nb <= q->nb) // insertion de l'element de liste1
- {
- l->suiv = new Elem (p->nb, NULL);
- if (p->nb == q->nb) //decalage pour ne pas inserer 2 elements egaux
- {
- q = q->suiv;
- }
- p = p->suiv;
- }
- else //insertion de l'element de liste2
- {
- l->suiv = new Elem (q->nb, NULL);
- q = q->suiv;
- }
- l = l->suiv;
- }
- //une des 2 listes est finie => on recopie la fin de l'autre a la suite de la liste finale
- while (p != NULL)
- {
- l->suiv = new Elem (p->nb, NULL);
- p = p->suiv;
- }
- while (q != NULL)
- {
- l->suiv = new Elem (q->nb, NULL);
- q = q->suiv;
- }
- l = liste;
- liste = liste->suiv;
- l->suiv = NULL;
- delete l;
- }
- }
|
edit: lol, je viens de remarquer que la question date du 01/02 mdr
J'espère que ça te servira encore
Message édité par Majca Jalasu le 24-02-2003 à 01:10:58