Problem de liste chaine du C

lucie -  
 behovic -
bonjour:
j'ai un problem du liste chainé:
effacer le premier element de la liste ************************************************
fichier liste.h :

typedef struct Tcell{
char lt;
int pt;
struct Tcell *next;

}TCELL,* PTCELL;

void print_list(PTCELL l);
void free_first(PTCELL head);
**************************************************
fichier liste.c :

#include <stdio.h>
#include "liste.h"

int main()
{/*definir la liste chainee*/

PTCELL liste1=(PTCELL)malloc(3*sizeof(TCELL));
liste1->lt='a';
liste1->pt=1;
liste1->next=liste1+1;//donne l address de prochaine
liste1->next->lt='b';
liste1->next->pt=2;
liste1->next->next=liste1+2;
liste1->next->next->lt='c';
liste1->next->next->pt=3;
liste1->next->next->next=NULL;

print_list(liste1);//imprimer la liste

PTCELL *l=liste1;
free_first(liste1);
print_list(liste1);
return 0;
}

************************************
fichier free_first.c :

void free_first(PTCELL head1)
{
PTCELL head2;
head2=head1;
head1=(&head1).next;
free(head2);
}
*****************************************
le resultat n'est pas bon :

[(a,1)(b,2)(c,3)]
[(,1)(b,2)(c,3)]
*********************************
en revanche :
fichier free_first.c :

void free_first(PTCELL *head)
{
PTCELL list;
list=*head;
head=(&head).next;
free(list);
}

**********************************
le resultat est bon :

[(a,1)(b,2)(c,3)]
[(b,2)(c,3)]

pourquoi le pointeur du pointeur est obligatoir ,merci bp bp :-)

2 réponses

  1. lucie
     
    je corrige une error:

    en revanche :
    fichier free_first.c :

    void free_first(PTCELL *head)
    {
    PTCELL list;
    list=*head;
    *head=(&(*head)).next;
    free(list);
    }
    0
  2. behovic
     
    slt;
    voila la fonction comment tu peut supprimer un element ds la liste si ta des problemes envoyer moi .....

    void SupprimerPersonnesListe()
    {
    char *nom;
    ppers pre, p = DL ;

    if(p == NULL)
    {
    printf("\n\t liste vide") ;
    return ;
    }

    nom = SaisieStr("entrer le nom a supprimer");

    if(strcmp(p->Nom,nom) == 0)
    {
    DL = p->svt;

    free(p->Nom);
    free(p);
    return ;
    }

    pre = p ;
    p = p->svt ;

    while(p != NULL)
    {
    if(strcmp(p->Nom,nom) == 0)
    {
    pre->svt = p->svt ;
    free(p->Nom);
    free(p);
    return ;
    }
    pre = p ;
    p = p->svt ;
    }
    printf("\n\t >>> Element non trouve : Aucune supression\n") ;
    }
    0