TD1 Correction
TD1 Correction
TD1 Correction
Exercice 1
Écrire une fonction qui prend en paramètre une liste chaînée et renvoie une autre liste
ayant les mêmes éléments, mais dans l’ordre inverse.
Exercice 2
1. Écrire une fonction qui prend en paramètre une liste chaînée et une donnée, et
qui supprime la première occurrence de cette donnée dans la liste.
2. Écrire une fonction qui supprime toutes les occurrences d’une donnée (passée en
paramètre) dans une liste chaînée. Proposer deux version, une version itérative
et une version récursive.
Exercice 1
Element *CreerListeEnvers(Element * L)
{
Element *p, *nouveauL = NULL;
p=L;
while (p != NULL)
{
nouveauL = insertDebut(p-> contenue, nouveauL);
p = p->suivant;
}
return nouveauL;
}
Exercice 2
Element* Supprime1occur(Element*L,int n){
Element *p, *suivant, *pl;
p=L;
if(p==NULL)
return L;
if(p->contenue==n)
{
pl=p->suivant;
free(p);
return pl;
}
suivant=p->suivant;
while(suivant->suivant!=NULL&&suivant->contenue!=n){
p=suivant;
suivant=suivant->suivant;
}
if(suivant->contenue==n)
{
p->suivant=suivant->suivant;
free(suivant);
}
return L;
}
------------------------------------------------------
Element* supprimertouteoccur(Element* L, int n)
{
if (L!=NULL)
{
if (L->contenue==n) {
// si l'élément à enlever est en tête
Element *p=L->suivant;
free(L);
L= supprimertouteoccur(p, n);
} else {
L->suivant= supprimertouteoccur(L->suivant, n);
}
}
return L;
}
}
p=L;
suivant=p->suivant;
while(suivant->suivant!=NULL)
{
if(suivant->contenue==n)
{
p->suivant=suivant->suivant;
free(suivant);
}
else
p=p->suivant;
suivant=p->suivant;
}
if(suivant->contenue==n)
{
p->suivant=NULL;
free(suivant);
}
return L;
}
Exercice 3
1.
Element * RecopieListe(Element * L)
{
Element *p, *nouveauL = NULL;
p=L;
while (p != NULL)
{
nouveauL = insereFin(nouveauL, p->contenue);
p = p->suivant;
}
return nouveauL;
}
---------------------------------------------------
2.
Element * ConcatenatDestruct(Element *L1, Element *L2)
{
Element *p;
p=L1;
if (p!=NULL)/* si on a trouvé n */
{
precedent=p->precedent;
suivant=p->suivant;
free(p);
else/* precedent==NULL */
return suivant;
}
return L;
}
-------------------------------------------------------------
5.
Element *SupprimeDOccurence(Element *L,int n)
{
Element *precedent,*suivant,*p;
p=L;
if (p!=NULL)/* si on a trouvé n */
{
precedent=p->precedent;
suivant=p->suivant;
free(p);
else/* precedent==NULL */
else/* precedent==NULL */
L=suivant;