Structures de Données & Algo (IGL245)
Thème :
Junior
1 vues ·5/10 leçonsPARTIE 2 (Suite) : SUPPRESSION
TP 7 : Supprimer un Nœud
La suppression est plus délicate car il faut “recoudre” la chaîne avant de supprimer l’élément pour ne pas perdre la suite de la liste.
Algorithme Général (Suppression par valeur)
- Si la liste est vide, on ne fait rien.
- Cas spécial : Si l’élément à supprimer est la tête (
head).- Sauvegarder
headdans un pointeur temporairetoDelete. - Avancer
headvershead->next. - Libérer
toDelete.
- Sauvegarder
- Cas général :
- Parcourir la liste avec deux pointeurs :
currentetprev(précédent). - Chercher le nœud.
- Si trouvé : Faire pointer
prev->nextverscurrent->next(on saute le nœud courant). - Libérer
current.
- Parcourir la liste avec deux pointeurs :
Schéma Suppression (Milieu) :
Code (Extrait)
void deleteNode(Node** head, int key) {
Node *temp = *head, *prev;
// Si la tête contient la clé
if (temp != NULL && temp->data == key) {
*head = temp->next;
free(temp); // Libération mémoire cruciale !
return;
}
// Recherche de la clé
while (temp != NULL && temp->data != key) {
prev = temp;
temp = temp->next;
}
// Si pas trouvé
if (temp == NULL) return;
// Déliement
prev->next = temp->next;
free(temp);
}
Gestion de la Mémoire (free)
En C, il n’y a pas de Garbage Collector. Si vous supprimez un lien vers un nœud sans appeler free(), ce bloc mémoire reste occupé jusqu’à la fin du programme. C’est une fuite de mémoire (memory leak).
TP 7 : Exercice
Implémentez deleteNode et deleteAtPosition (qui supprime le n-ième élément). Testez la suppression du premier, dernier, et d’un élément central.
Prêt à passer à la suite ?
Vous avez terminé cette leçon sur PARTIE 2 (Suite) : SUPPRESSION. Continuez votre apprentissage avec la prochaine leçon ou explorez d'autres formations.