Bonjour,

Je bloque sur un exercice (pourtant assez facile) d'ajout d'un élément à une liste chainée. Concrètement je dois faire passer le premier élément d'une liste A à une liste B.
Voici mon code :
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
22
23
24
25
26
27
28
 
t_push          *put_in_b(t_push **list_a, t_push **list_b)
{
  t_push        *lptr;
 
  if ((lptr = malloc(sizeof(t_push))) == NULL)
    return (NULL);
  if (lptr != NULL)
    {
      lptr->data = (*list_a)->data;
      lptr->prev = NULL;
      if ((*list_b)->tail == NULL)
        {
          lptr->next = NULL;
          (*list_b)->head = lptr;
          (*list_b)->tail = lptr;
        }
      else
        {
          (*list_b)->head->prev = lptr;
          lptr->next = (*list_b)->head;
          (*list_b)->head = lptr;
        }
      (*list_b)->data = lptr->data;
      (*list_b)->len++;
    }
  decal(list_a);
}
la fonction decal(t_push **list_a) fonctionne sans problème (elle supprime l'élément de la liste A passé dans la liste B).
Mon souci est que ma fonction put_in_b, plutôt que de stocker les éléments mis dans la liste B au fur et à mesure, remplace à chaque fois le premier élément ce qui fait que ce genre d'appel :
list_a : 3 5 4 6
list_b :
put_in_b(&list_a, &list_b);
put_in_b(&list_a, &list_b);
put_in_b(&list_a, &list_b);

me donne : my_show_list(list_b) = 4 alors que je veux : my_show_list(list_b) = 4 5 3

Je ne sais pas si je suis très claire,
merci d'avance