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;
}