Une fonction inverser une liste chainee en langage c++

Messages postés
3
Date d'inscription
lundi 28 novembre 2005
Statut
Membre
Dernière intervention
17 avril 2009
- - Dernière réponse : leroim8
Messages postés
1
Date d'inscription
lundi 7 décembre 2009
Statut
Membre
Dernière intervention
6 septembre 2011
- 6 sept. 2011 à 16:30
salut,

Pouvez vous m'aider?

j'ai trouve des defficultees a ecrire une fonction (inverser liste chainee)

et merci
Afficher la suite 

2 réponses

Meilleure réponse
Messages postés
1
Date d'inscription
lundi 7 décembre 2009
Statut
Membre
Dernière intervention
6 septembre 2011
6
8
Merci
/* On considère une liste, donnée par son pointeur de tête T1. Écrivez les instructions qui inversent le sens de parcours de cette liste, sans création de maillon, et placent en T2 l’adresse de tête de la liste renversée.*/

llist parcourlisteinverser(llist T1)
{
llist l=T1 ;
llist r= NULL;
llist p ;
while(l!=NULL)
{
p=l;
l=l->suivant;
p->suivant=r;
r=p;
}
return r;
}

Dire « Merci » 8

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 138 internautes nous ont dit merci ce mois-ci

Commenter la réponse de leroim8
Messages postés
124
Date d'inscription
jeudi 2 janvier 2003
Statut
Membre
Dernière intervention
16 février 2006
1
1
Merci
Pourtant ce n'est pas ce qu'il y a de plus dur ... le principe est tout bete :

[] -> [] -> [] -> [] -> 0 (oui c'est une liste chainée !!!)

C'est faisable en parcourant la chaine en gardant en memoire 2 choses essentielles :

- l'adresse precedente

- l'adresse suivante

Que l'on inverse tout simplement a chaque maillon de la chaine !



ex: 'prec' l'adresse du maillon precedent et 'next' l'adresse du maillon suivant

on cherche a obtenir ceci : 0 <- [] <- [] <- [] <- []

donc a faire pointer les 'next' vers le maillon precedant, en faisant pointer le premier maillon sur 0

donc on commence avec prec 0 et next l'adresse du 2eme maillon

si on fait pointer le premier maillon sur prec on obtient ceci :

0 <- [] (rien) [] -> [] -> []-> 0
avec prec = l'adresse du premier maillon, et next l'adresse du deuxieme

on peut alors aller sur le deuxieme maillon et faire l'operation identique ce qui nous donne

0 <- [] <- [] (rien) [] -> [] -> 0 avec prec =
l'adresse du deuxieme maillon et next l'adresse du 3eme ...

il suffit alors de repeter cette operation jusqu'a ce que next == 0, ce
qui veut dire que l'on est arrive a l'ancienne fin de notre liste
chainee ...



Je pense avoir ete clair ...
Commenter la réponse de cs_Tidam