Bonjour à tous,

Je dois faire un programme qui trie une liste chainée double selont différents criteres. Pour commencer j'ai décidé de ne classer la liste chainnée que par nom.

Malheureusement je n'ai pas le résultat escompté.
Au moment de l'affichage, cela m'affiche le une ligne à l'infini.

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
 
 
LISTE *tri_insertion(LISTE *liste,char choix)
{
        LISTE *liste_triee; //liste toujours triée
        ENTREE *tmp;
        ENTREE *courant;
        liste_triee=creer_liste();
        while((liste->t)>1)
        {
            tmp=liste->first->next;
            courant=liste->first;
            while(courant!=NULL)
            {
                if(strcmp(courant->nom,tmp->nom)<0)
                {
                    tmp=courant;
                }
                courant=courant->next;
            }
 
            if(tmp->previous==NULL)
            {
                liste->first=tmp->next;
            }
            else
            {
                if(tmp->next==NULL)
                {
                    tmp->previous->next=NULL;
                }
                else
                {
                    tmp->previous->next=tmp->next;
                    tmp->next->previous=tmp->previous;
                }
            }
            ajoute_entree(tmp,liste_triee);
            liste->t--;
        }
        ajoute_entree(liste->first,liste_triee);
        return liste_triee;
}

et la fonction ajoute_entree :

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
 
void ajoute_entree(ENTREE *entree, LISTE *liste) // ajoute une entree à la fin d'une liste initialisee ou existante (cfr. creer_liste())
{
    //  (ne manipule pas les donnees).
    entree->previous=NULL;
    entree->next=NULL;
    if(liste->t==0)
    {
        liste->first=entree;
        entree->previous=NULL;
    }
    else
    {
        ENTREE *courant;
        ENTREE *previous;
        courant=liste->first;
        previous=liste->first;
        while(courant->next!=NULL)
        {
            courant=courant->next;
            if(courant->next==NULL)
            {
                previous=courant;
            }
        }
        courant->next=entree;
        entree->previous=previous;
    }
    liste->t++;
}
J'ai refait l'exercice en algorithme sur une feuille et ca m'a l'air bon donc je comprends pas où est mon érreur...
merci de votre aide...