Supprimer element liste chaine C

nounou_89 Messages postés 56 Statut Membre -  
nounou_89 Messages postés 56 Statut Membre -
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;
}

5 réponses

  1. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    je ne comprends pas ta question. Essai d'être plus clair sur ce que tu veux faire.
    Le code écrit me semble bon...
    0
  2. nounou_89 Messages postés 56 Statut Membre 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
  3. nounou_89 Messages postés 56 Statut Membre 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
  4. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. nounou_89 Messages postés 56 Statut Membre 12
     
    merci pour ton aide
    0