Problema su codice liste concatenate

di il
1 risposte

Problema su codice liste concatenate

Salve a tutti! Non capisco perchè il codice che includerò, che dovrebbe eliminare gli elementi pari, alla fine elimina tutto. 

#include <iostream>
using namespace std;

struct Nodo {
   int valore;    // Numero che il nodo contiene
   Nodo* next;    // Puntatore al prossimo nodo della lista

   // Funzione per creare un nuovo nodo con un valore specificato
   Nodo* creaNodo(int num) {
       Nodo* n = new Nodo();
       n->valore = num;
       n->next = nullptr; // Nessun nodo successivo per ora
       return n;
   }

   // Funzione per visualizzare i valori della lista
   void visualizza(Nodo* p) {
       while (p != nullptr) {
           cout << p->valore << " -> ";
           p = p->next;
       }
       cout << "nullptr" << endl;
   }

   // Funzione per eliminare i nodi con valori pari
   void elimina_pari(Nodo*& p) {
       while (p != nullptr) {
           Nodo* temp = p; // Salva il nodo corrente
           if (temp->valore % 2 == 0) { // Controlla se il valore è pari
               p = p->next; // Aggiorna il puntatore alla testa della lista
               delete temp; // Elimina il nodo
           } else {
               // Se il valore non è pari, continua con il nodo successivo
               p = temp->next; // Passa al nodo successivo
           }
       }
   }
};

int main() {
   Nodo nodoBase;
   Nodo* lista = nullptr;

   // Creazione della lista con valori
   lista = nodoBase.creaNodo(10); // Nodo 1 (pari)
   lista->next = nodoBase.creaNodo(25); // Nodo 2 (dispari)
   lista->next->next = nodoBase.creaNodo(15); // Nodo 3 (dispari)
   lista->next->next->next = nodoBase.creaNodo(30); // Nodo 4 (pari)
   lista->next->next->next->next = nodoBase.creaNodo(5); // Nodo 5 (dispari)

   // Visualizza la lista originale
   cout << "Lista originale: ";
   nodoBase.visualizza(lista);

   // Elimina i nodi con valori pari
   nodoBase.elimina_pari(lista);
   
   // Visualizza la lista dopo l'eliminazione dei numeri pari
   cout << "Lista dopo eliminazione dei pari: ";
   nodoBase.visualizza(lista); // Dovrebbe mostrare solo i numeri dispari

   return 0;
}

1 Risposte

  • Re: Problema su codice liste concatenate

    Ciao. Allora, 3 cose

    1. Nell'editor del forum usa l'apposito pulsante per inserire il codice (ti fa scegliere anche il linguaggio ).
    2. Venendo al tuo problema, nella funzione elimina_pari passi “lista” come riferimento. A prescindere che abbia o meno eliminato nodi, a cosa punterà “p” , ovvero “lista” , alla fine del ciclo?
    3. Sarebbe più appropriato usare una struct (o una class) Nodo che faccia solo il nodo, e un'altra che gestisca i nodi. 
Devi accedere o registrarti per scrivere nel forum
1 risposte