Lire une lise chainée simple à l'envers

Résolu
Bonjour,
Est-il possible de parcourir un liste chainée simple à l'envers pour afficher les saisies dans l'ordre inverse? Je vois pas trop comment je pourrai faire?
Configuration: Windows XP
Firefox 3.0.3

6 réponses

  1. Modérateur
    Salut,

    Pour lire une liste simplement chaînée à l'envers tu crées une fonction InsertionEnTete (donc chaque nouveau élément sera insérer en tête de liste)

    Liste initiale : elem1, elem2,...................,elemN

    Insertion de 1er élément en tête - La nouvelle liste sera elem1
    Insertion de 2ème élément en tête - La nouvelle liste sera elem2, elem1

    Insertion de Nième élément en tête - La nouvelle liste sera elemN ..................elem2, elem1
    Liste *p;
    Liste *L1;
    Liste *L2;
    
    for(p=L1;p!=NULL;p=p->suivant)
      InsertionEnTete(L2,p->donnee);
    
    2
    1. Ne connaissant pas le C et donc n'ayant aucune idée de l'implémentation des liste chainées dans ce langage, ni si les listes chainées doubles sont faciles à utiliser (ça semblerait assez pratique ici en même temps)
      1
      1. J'ai essayé ça marche parfaitement bien! Merci beaucoup beaucoup!!!
        0
      2. didy_gwatinik tu peux ecrire le code svp ??
        0
    2. Non, pour retourner une liste, il suffit de la parcourir récursivement, et de stocker la tête à la queue d'une autre. Je ne connais pas la synthaxe en C, mais en Caml, ça donnerait ça (sachant que t::q représente la liste chainée dont la tête est t, et la queue est q, que [] représente la liste vide, hd (l) la tête de l et tl(l) la queue de l) :

      let miroir liste =
      let rec aux l1 l2 =
      if l1 = [] then l2
      else miroir tl (l1) (hd(l1)) :: l2
      in
      aux liste []
      ;;
      0
      1. Ah brillante idée je vais essayer ça toute de suite!!
        0
    3. tu peux le faire en supprimant le dernier elements de la liste a chaque fois aussi
      0
      1. J'y ai également pensé mais comment faire pour récupérer la case précédente?
        0
      2. Récupérer le dernier terme d'une liste chainée simple requiert de la parcourir entièrement, autant donc la retourner une bonne fois pour toutes ! (cf plus bas)
        0
    4. je ne crois pas que tu pouras ..........
      0
      1. Il faut absolument que je passe par une liste doublement chainée?
        0
    5. Le plus simple me semblerait de la retourner d'abord, et de la lire après.
      0
      1. Mais comment faire, je ne vois pas justement c'est l'accès à la "case" précédente qui me pose un problème
        0