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:
Supprimer tous les nœuds dans la liste chaînée

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 et C++ et la question est balisé C++.