Lire une lise chainée simple à l'envers

Résolu
didy_gwatinik Messages postés 358 Statut Membre -  
mrism000 Messages postés 47 Statut Membre -
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 21644 Statut Modérateur, Contributeur sécurité 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 307 Statut Membre 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 358 Statut Membre 80
 
J'ai essayé ça marche parfaitement bien! Merci beaucoup beaucoup!!!
0
mrism000 Messages postés 47 Statut Membre
 
didy_gwatinik tu peux ecrire le code svp ??
0
LeYaude Messages postés 307 Statut Membre 46
 
Le plus simple me semblerait de la retourner d'abord, et de la lire après.
0
didy_gwatinik Messages postés 358 Statut Membre 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 24 Statut Membre 2
 
je ne crois pas que tu pouras ..........
0
didy_gwatinik Messages postés 358 Statut Membre 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 2449 Statut Membre 437
 
tu peux le faire en supprimant le dernier elements de la liste a chaque fois aussi
0
didy_gwatinik Messages postés 358 Statut Membre 80
 
J'y ai également pensé mais comment faire pour récupérer la case précédente?
0
LeYaude Messages postés 307 Statut Membre 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 307 Statut Membre 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 358 Statut Membre 80
 
Ah brillante idée je vais essayer ça toute de suite!!
0