Partage
  • Partager sur Facebook
  • Partager sur Twitter

inverser une liste chainée (LLC) recursivement

Sujet résolu
    30 mars 2020 à 4:14:39

    Bonjour tous le monde,

    j'essaye de modaliser une procedure inverse recursivement , mais j'ai un probleme , quand j'affiche la liste apres l'avoir inversé sa me donne que le premier.

    voici mon code et un screenshot apres l'execution.

    merci.

    #include <stdio.h>
    
    typedef struct noeud {
        struct noeud * suiv;
        int val;
    }noeud;
    
    void insertion (noeud **tete ,int x){   /*ça marche juste pour le debut de la liste*/
        noeud * new = malloc(sizeof(*new));
        new->val = x;
        new->suiv = *tete;
        *tete = new; 
    }
    
    void lecture (noeud *tete){
        noeud *ptr = tete;
        while (ptr != NULL){
            printf("%d\n",ptr->val);
            ptr = ptr->suiv;
        }
    
    }
    
    static void inverse (noeud **tete,noeud *n, noeud *p, noeud *r){
        if (n == NULL){
            *tete = r;
        }
        else{
            p = n;
            n = n->suiv;
            p->suiv = r;
            r = p;
            *tete = r;
            inverse(&tete, n, p, r );
        }
    }
    
    int main (){
        noeud *p = NULL;
        insertion(&p,1);
        insertion(&p,2);
        insertion(&p,3);
        lecture(p);
        printf("--------------------------------\n");
        inverse(&p,p,p,NULL);
        lecture(p);
    
    }

     



    • Partager sur Facebook
    • Partager sur Twitter
      30 mars 2020 à 7:14:38

      Dans la ligne:
      inverse(&tete, n, p, r );
      le '&' devrait être enlevé.

      -
      Edité par PierrotLeFou 30 mars 2020 à 7:29:38

      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        30 mars 2020 à 13:35:40

        PierrotLeFou a écrit:

        Dans la ligne:
        inverse(&tete, n, p, r );
        le '&' devrait être enlevé.

        -
        Edité par PierrotLeFou il y a environ 6 heures

        Merci pour votre aide :) , ça marche maintenant , mais si vous m'expliquer pourquoi je dirai pas non :)))
        • Partager sur Facebook
        • Partager sur Twitter
          30 mars 2020 à 14:24:28

          Dans l'appel à inverser, tete est déjà un pointeur vers un pointeur. On n'a pas besoin de le dire.
          Cela serait équivalent à noeud * * * tete.
          • Partager sur Facebook
          • Partager sur Twitter

          Le Tout est souvent plus grand que la somme de ses parties.

            30 mars 2020 à 20:17:45

            PierrotLeFou a écrit:

            Dans l'appel à inverser, tete est déjà un pointeur vers un pointeur. On n'a pas besoin de le dire.
            Cela serait équivalent à noeud * * * tete.

            D'accord merci :)
            • Partager sur Facebook
            • Partager sur Twitter

            inverser une liste chainée (LLC) recursivement

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown