Supprimer tous les nœuds dans la liste chaînée
J'ai une liste liée contient 3 nœuds comme l'image le montre:
Il est un pointeur de tête et temp1 pointer à l'avant de la liste, et la queue points de point à la fin de la liste.
Je veux enlever tous les nœuds, et de le changer de revenir à sa forme initiale ( queue = NULL, tête = first_node , mais le premier nœud n'ont pas de valeur dans les données et le champ suivant).
Parce que je veux commencer à mettre en place quelques nouvelles valeurs. Pour supprimer toutes les données, est-ce code va supprimer des nœuds à l'intérieur de cette liste, et à gauche avec le premier nœud avec aucune valeur dans les données et le champ suivant?
Ce code est en C++:
while(temp1!=tail)
{
temp1 = temp1->next;
if(temp1->next == tail)
{
tail=temp1;
temp1 = temp1->next;
free(temp1);
}
}
Mais alors, est-ce à dire que le dernier nœud sera supprimé? il n'existe aucun moyen de supprimer tous les nœuds sauf le premier?
- Vous devriez envisager d'utiliser la STL <liste> à moins que vous ayez une bonne raison de rouler votre propre. <liste> prend en charge la compensation de tous les éléments ou une plage. Voir cplusplus.com/reference/stl/list
- c'est du C, pas du C++.
- L'exemple de code, il a posté est en fait valable
C
etC++
et la question est baliséC++
.
Vous devez vous connecter pour publier un commentaire.
Pour supprimer tous les nœuds sauf le premier nœud, vous pouvez essayer de code ci-dessous.
Cela va supprimer tous les nœuds sauf pour le premier. Mais les données avec le premier nœud restera comme il est.
Avertissement: je suppose que c'est uniquement à des fins d'apprentissage et dans le monde réel scénario, vous utilisez
std::list<>
ou récipient similaire.Pour une seule liste, vous pouvez déposer tout ce fardeau d'un laissez-la stdlib gérer les pointeurs:
Vous pouvez utiliser en toute sécurité
.reset()
méthode de faire des opérations sur la liste:De http://en.cppreference.com/w/cpp/memory/unique_ptr/reset.
Et c'est à peu près ce que vous voulez faire lors de la suppression. Je crois que vous pouvez également utiliser
unique_ptr::swap()
, de manipuler facilement vos nœuds.Au lieu de
free
, C++ utilise supprimer fonction.Vérifier la lien à leurs connaissances approfondies sur tous les types d'opérations(y compris récursive ou itérative supprimer) sur les listes chaînées.
malloc
puis il doit utiliserfree
. Maintenant, la question serait plutôt: pourquoi aurait-il utilisermalloc
en C++ ?delete
. Il estunique_ptr
pour elle.La logique de cette serait plus correct si c'est de cette façon.
Après la déclaration
Ajouter la condition
Puisqu'à la suite de la suppression du dernier nœud, il est inutile de réaffectation l'adresse du pointeur de têtes de temp1.