Supprimer le nœud de liste chaînée (de manière récursive)

!=Je suis actuellement en train de travailler sur d'effacement récursif de la fonction bool qui thakes liste et int comme arguments et retourne true si l'int a donc été trouvé et supprimé et false si elle n'a pas été trouvé dans la liste. Il semble fonctionner, mais le problème est qu'il supprime les la prochaine int nombre dans la liste, et pas le courant:

 typedef struct E_Type * List;

 struct E_Type
 {
        int data;
        List next = 0;
 };

bool erase(const List & l, int data){
List current = l;   
if (current == 0)
{
   return false;
 }
else if (current->data == data)
{
      List deleteNode = new E_Type;
     deleteNode = current->next;//probably this causes the error, but how can I point it to the current without crashing the program
     current->next = deleteNode->next;
     delete deleteNode;
     return true;
}

else if (current->data != data)
{
      return erase(current->next, data);
}


}
  • Éventuellement sans rapport avec: List deleteNode = new E_Type; deleteNode = current->next;? C'est une fuite de mémoire là.
  • Un plus sans lien de parenté commentaire: quel est le but de else if (current->data > data)? L'instruction return est la même de toute façon.
  • La déclaration if (current == 0) ne fonctionnera pas, à moins que List est la définition de type d'un pointeur de type ou de la classe surchargé == opérateur qui prend un pointeur d'entier.
  • oui la Liste est typedef avec poiner à E_Type / R. Martinho vous avez raison, je vais corriger cette fuite, merci
  • Il y a même plus d'erreurs possibles et les problèmes avec votre code, pourquoi ne pas simplement utiliser les std::list (ou encore mieux, std::vector)?
  • Je peux, mais ma tâche est d'utiliser la structure suivante Nœud typedef struct E_Type * Liste; struct E_Type { int data; Liste = 0; };
  • Votre tâche de préciser que la méthode doit être récursive?

InformationsquelleAutor EmilDo | 2012-12-06