Liste doublement chaînée

na -  
 Du crétin, te moquer point tu ne dois -
Bonjour,

j'ai essayé de créer une fonction qui supprimerait un élément donné de ma liste mais ma fonction supprime tous les éléments compris entre le début de la liste et l'élément que je veux supprimer. Pourriez-vous m'aider à trouver mon erreur svp ? Merci.

Voilà les structures que j'utilise et ma fonction :

typedef struct boule{
	 SDL_Surface *image;
	 struct boule *suivant;
	 struct boule *precedent;
	 SDL_Rect position;
	 int valeur;
 } BOULE;

 typedef struct cortege{
	 BOULE *debut;
	 BOULE *fin;
	 int taille;

} CORTEGE;

void supprimer_boule(CORTEGE *cort, BOULE *boul)
{  
    if (cort!= NULL)
    {

        BOULE *courant= malloc(sizeof(BOULE));
        courant=cort->debut;

        while(courant!=NULL)
        {
     
            if(courant==boul)
            {
             
                if(courant->suivant==NULL)
                {
                
                    cort->fin=courant->precedent;
					free(courant);
                 
                }
             
                else if (courant->precedent==NULL)
                {
                    cort->debut=courant->suivant;
                    cort->debut->precedent=NULL;
                    free(courant);
                  
                }
                else
                {	
                   
                    courant->suivant->precedent=courant->precedent;
                    courant->precedent->suivant=courant->suivant;
                    free(courant);
                   
                }
            
               
				
                cort->taille =cort->taille-1;
                break;
            }      
            
            
            else
            {
        
                courant=courant->suivant;
            }
            
        }
    } 

A voir également:

1 réponse

Du crétin, te moquer point tu ne dois
 
Salut,

Je pige rien à C

pour supprimer un atome d'une liste doublement chainée, tu dois
mettre boule.precedent dans boule->suivant.precedent
mettre boule.suivant dans boule->precedent.suivant
une fois que c'est fait, tu peux détruire boule.
1