Bonjours tous,

Je suis toujours en train de vagabonder sur des exercices de pile, je voulais juste pour m'entrainer créer une fonction qui efface le premier élément ajouté à une pile (donc le dernier en vrai dans la liste) :

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
 
#include <stdio.h>
#include <stdlib.h>
 
//-------------------------------------------
///définir la structure
//-------------------------------------------
   typedef struct pile
        {
                int valeur;
                struct pile *prec;
        } pile ;
 
//-------------------------------------------
/// intitialiser la pile à NULL
//-------------------------------------------
 pile *MaPile = NULL;
 
//------------------------------------------
///fonction d'ajout dans la liste chaînée
//-------------------------------------------
pile * add(pile ** p,int val) {
        pile * n=malloc(sizeof(pile));
        n->prec= *p;
        *p=n;
        n->valeur= val;
        return *p;}
Jusque là, c'est des préliminaires nécessaire pour la compréhension du problème, le voilà le code de la fonction qui m'intéresse (et qui ne marche pas !) :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
 
void efface_first(pile **p){
 
        pile * n=*p;
        pile * m=(*p)->prec;
        pile * k;
        while (m)
        {
            add(k,n->valeur);
        }
 
        *p = k;
}