Supprimer element liste chaine C

nounou_89 Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   -  
nounou_89 Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

je voudrais savoir comment supprimer un element d'une liste chainée je sais l'ecrire avec une position mais pas sans c vraiment urgent
voila le code que j'ai ecri:

int supp_dans_liste (Liste * liste, int pos){
if (liste->taille <= 1 || pos < 1 || pos >= liste->taille)
return -1;
int i;
Element *courant;
Element *supp_element;
courant = liste->debut;

for (i = 1; i < pos; ++i)
courant = courant->suivant;

supp_element = courant->suivant;
courant->suivant = courant->suivant->suivant;
if(courant->suivant == NULL)
liste->fin = courant;
free (supp_element->donnee);
free (supp_element);
liste->taille--;
return 0;
}

A voir également:

5 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
je ne comprends pas ta question. Essai d'être plus clair sur ce que tu veux faire.
Le code écrit me semble bon...
0
nounou_89 Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   12
 
en fait je voudrai ecrire une fonction qui me supprime un element passé en parametre de la liste chainé sans utilisé in pos
0
nounou_89 Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   12
 
je l'ai modifier mais je ne sai pas s'il fonctionne

/* Supprimer une station */
int supprime_station(station_t* s){
liste_pStations_t* stations;
liste_pStations_t* precedent = NULL;
if(rechercher_station(s->nom) != NULL){
for(stations = toutes_les_stations ; stations != NULL ; stations=stations->next){
if (strcmp(stations->s->nom,nom) == 0){
if(precedent == NULL)
toutes_les_stations = stations->next;
else
precedent->suivant = stations->next;
free(stations);
break;
}
precedent = encourt;
}
}
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Je pense que ça doit fonctioné. à ta place je serais repartie du code précédent.
nt supp_dans_liste (Liste * liste, const char* nom){
if (liste->taille <= 1 || pos < 1 || pos >= liste->taille)
return -1;
int i;
Element *courant;
Element *supp_element;


for (courant = liste->debut;courant->suivant!=0; courant = courant->suivant)
    if(strcmp(courant->suivant->nom,nom)==0) break;
if(strcmp(courant->suivant->nom,nom)!=0) return -1;

supp_element = courant->suivant;
courant->suivant = courant->suivant->suivant;
if(courant->suivant == NULL)
liste->fin = courant;
free (supp_element->donnee);
free (supp_element);
liste->taille--;
return 0;
} 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nounou_89 Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   12
 
merci pour ton aide
0