7.2. modification

  procedure SuppressionPremier(var Debut: VersElement);
  var Courant: VersElement;
  begin { SuppressionPremier }
    if Debut = nil then {chaîne déjà vide}
    else begin
      Courant := Debut;
      Debut := Debut^.Suivant;
      dispose(Courant);
      end; { else }
  end; { SuppressionPremier }

  procedure SuppressionDernier(var Debut: VersElement);

  var Courant: VersElement;

  begin { SuppressionDernier }
    if Debut = nil then {chaîne déjà vide}
    else if Debut^.Suivant = nil then 
      dispose(Debut){chaîne d'un seul él.}
    else begin
      Courant := Debut;
      { tant qu'il y a 2 successeurs,
        passe à l'élém. suivant}
      while Courant^.Suivant^.Suivant <> nil do
        Courant := Courant^.Suivant;
      { l'élément pointé par Courant n'a }
      { plus qu'un successeur: le dernier }
      dispose(Courant^.Suivant);
      end; { else }
  end; { SuppressionDernier }

  procedure SuppressionMilieu(Courant: VersElement);

  { supprime l'élément pointé sans modifier
    le pointeur. Restriction: ne marche pas
    pour le dernier élément}

  var Prochain: VersElement;

  begin { SuppressionMilieu }
    Prochain := Courant^.Suivant;
    { copie obj. pointés et non pointeurs }
    Courant^ := Prochain^;
    dispose(Prochain);
  end; { SuppressionMilieu }
autre possibilité :
  procedure SuppressionMilieu(var Courant:VersElement);

  { - Supprime l'élément pointé et change
      le pointeur pour le faire pointer
      vers l'élément suivant.
    - Pour qu'elle fonctionne correctement,
      il faut que, lors de l'appel à cette
      procédure, on utilise comme paramètre
      effectif le pointeur "suivant" de
      l'élément précédent. }

  var Ancien: VersElement;

  begin { SuppressionMilieu }
    Ancien := Courant;
    Courant := Courant^.Suivant;
    dispose(Ancien);
  end; { SuppressionMilieu }
Si l'on se trouve dans une situation où aucune de ces deux possibilités de SuppressionMilieu ne peut être appliquée telle quelle parce que les contraintes qui y sont liées sont trop restrictives, il faudra envisager de modifier le premier exemple, soit en rajoutant, pour le traitement du dernier élément, le parcours de la chaîne jusqu'à trouver l'avant-dernier, soit en ayant un élément "bidon" qui reste inutilisé à la fin de la chaîne et qui évite de devoir supprimer le dernier élément. Dans ce dernier cas, une chaîne vide contiendrait, malgré tout, au moins l'élément "bidon".

7.3. Utilisation

Table des matières.