Salut les amis ..
voici une fonction qui inverse une liste sans copier ses elements :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
//ma structure : 
typedef struct node{
  int data;
  struct node* next;
}node;
typedef node* pt ;
 
void reverserecv2(pt* listhead){
  pt curr=*listhead,suiv;
  //printf("before call : \nargument = %p \tcurr= %p \tcurr->next =%p \n",*listhead,curr,curr->next);
  if(curr && curr->next){
    suiv=curr->next;
    reverserecv2(&((*listhead)->next));
    //printf("after call before changing listhead : \n argument = %p \tcurr= %p \tcurr->next =%p \t suiv =%p\n",*listhead,curr,curr->next,suiv);
    suiv->next=curr;
    *listhead=curr->next;
    //printf("after changing listhead :\nargument = %p \t curr= %p \t curr->next =%p \tsuiv =%p\n",*listhead,curr,curr->next,suiv);
    suiv->next->next=NULL;
  }
}
le probleme que j'ai c'est le changement du listhead qui saute vers le dernier noeud , comment curr->next reste stable ? suiv et curr changent apres l'appel mais curr->next pointe toujours vers le dernier noeud .. pourquoi ? et merci beaucoup