J'ai essayé de comprendre comment inverser l'ordre d'une liste doublement liée, mais pour une raison quelconque, dans ma fonction, void reverse()
s'exécute en boucle une fois, puis tombe en panne pour une raison quelconque. Pour répondre à quelques questions, je m'auto-apprends avec l'aide de mes frères. Ce n'est pas tout le code, mais j'ai une fonction display()
qui imprime tous les nœuds par ordre chronologique de start_ptr
et un commutateur qui active certaines fonctions commeListe double de liens inversée en C++
case 1 : add_end(); break;
case 2 : add_begin(); break;
case 3 : add_index(); break;
case 4 : del_end(); break;
case 5 : del_begin(); break;
case 6 : reverse(); break;
C'est le Geist de mon code:
#include <iostream>
using namespace std;
struct node
{
char name[20];
char profession[20];
int age;
node *nxt;
node *prv;
};
node *start_ptr = NULL;
void pswap (node *pa, node *pb)
{
node temp = *pa;
*pa = *pb;
*pb = temp;
return;
}
void reverse()
{
if(start_ptr==NULL)
{
cout << "Can't do anything" << endl;
}
else if(start_ptr->nxt==NULL)
{
return;
}
else
{
node *current = start_ptr;
node *nextone = start_ptr;
nextone=nextone->nxt->nxt;
current=current->nxt;
start_ptr->prv=start_ptr->nxt;
start_ptr->nxt=NULL;
//nextone=nextone->nxt;
while(nextone->nxt!= NULL)
{
pswap(current->nxt, current->prv);
current=nextone;
nextone=nextone->nxt;
}
start_ptr=nextone;
}
}
Vous échangez le contenu des noeuds plutôt que le noeud p pointeurs. Êtes-vous sûr de vouloir faire ça? –
Sur une note connexe, vous pourriez regarder les choses d'un point de vue différent. Plutôt que d'inverser le contenu de la liste doublement liée elle-même, vous pouvez plutôt vous concentrer sur l'itération du contenu de la liste en sens inverse, ce qui devrait être simple puisque la liste est doublement liée. Par exemple, implémentez des itérateurs bidirectionnels de style STL pour votre liste. Ils peuvent être utilisés avec l'adaptateur 'std :: reverse_iterator <>' (pour 'rbegin()' et 'rend()'). Une fois ces méthodes implémentées, il sera facile de tirer parti des algorithmes STL, y compris 'std :: reverse()'. C'est un exercice amusant, IMO. – Void