Lire une lise chainée simple à l'envers

Résolu
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   -  
mrism000 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention   -
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?
A voir également:

6 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
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
LeYaude Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   46
 
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
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
J'ai essayé ça marche parfaitement bien! Merci beaucoup beaucoup!!!
0
mrism000 Messages postés 34 Date d'inscription   Statut Membre Dernière intervention  
 
didy_gwatinik tu peux ecrire le code svp ??
0
LeYaude Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   46
 
Le plus simple me semblerait de la retourner d'abord, et de la lire après.
0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
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
bzkr7 Messages postés 22 Date d'inscription   Statut Membre Dernière intervention   2
 
je ne crois pas que tu pouras ..........
0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
Il faut absolument que je passe par une liste doublement chainée?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
mype Messages postés 2435 Date d'inscription   Statut Membre Dernière intervention   437
 
tu peux le faire en supprimant le dernier elements de la liste a chaque fois aussi
0
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
J'y ai également pensé mais comment faire pour récupérer la case précédente?
0
LeYaude Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   46
 
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
LeYaude Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   46
 
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
didy_gwatinik Messages postés 352 Date d'inscription   Statut Membre Dernière intervention   80
 
Ah brillante idée je vais essayer ça toute de suite!!
0