Insertion element liste chaînée en c

Bonjour.,
quelqu'un peut m'explique ce code(l'insertion d'un element dans une liste )

void inserer(List **l, int val)
{
        List *tmp = NULL;
        List *laux = *l;
        List *elem = malloc(sizeof(List));
       if(elem !=NULL){
        elem->valeur = val;
        elem->suivant=NULL;
        while (laux){
            tmp=laux;
            laux=laux->suivant;
        }
        if(tmp!=NULL)
           tmp->suivant=elem;
        else


*l=elem;        }}

merci

2 réponses

  1. Contributeur
    bonjour, quelle partie du code ne comprends-tu pas?
    ne serait-il pas préférable que tu expliques ce que tu comprends, et que tu poses une question précise?
    1. void inserer(List **l , int val) // ajouter val à la fin de la Liste d'adresse l
      {
          List *tmp = NULL;           // tmp sera pointeur sur dernier élément
          List *laux = *l;            // pour parcours de liste, commence au premier élément
          List *elem = malloc(sizeof(List)); // allouer un nouvel élément
          if ( elem != NULL ) {       // si l'allocation s'est bien passée
              elem->valeur = val;     // initialiser l'élément
              elem->suivant = NULL;   // et le marquer comme dernier (pas de suivant)
              while ( laux ) {        // tant que l'on n'est pas au delà du dernier (laux!=NULL)
                  tmp = laux;         // noter pointeur sur dernier élément vu
                  laux = laux->suivant;// et passer au suivant
              }
              if ( tmp != NULL )      // on a vu des éléments
                 tmp->suivant = elem; // le suivant du dernier est le nouveau venu
              else                    // sinon on n'a pas vu d'élément
                 *l = elem;           // le nouveau devient le début de liste
      }    }
      On peut aussi faire plus court.
      Et tu peux poser des questions précises.