Concetti Chiave
- La funzione
split
separa una lista di nodi in due liste: una con numeri pari e l'altra con numeri dispari. - Utilizza una struttura
nodo
per rappresentare gli elementi della lista, con un campoval
e un puntatorenext
. - La funzione
insert
viene impiegata per aggiungere nuovi elementi alla lista pari o dispari, creando nuovi nodi se necessario. - La direzionalità dei parametri in
split
è indicata comeI – O - O
, significando un input e due output. - Esempio di utilizzo: se la lista originale contiene i numeri 1, 5, 6, 4, 9, dopo l'uso di
split
, si avranno le listepuntPari
(6, 4) epuntDispari
(1, 5, 9).
Si assuma come data la seguente dichiarazione di tipo:
struct nodo{
int val;
nodo *next;
};
Scrivere in C++ la definizione di una funzione il cui prototipo è:
void split(nodo *lista, nodo *&pari, nodo *&dispari);
e tale che se l, p e d sono variabili di tipo puntatore a nodo allora l’istruzione
split(l,p,d); fa in modo che p e d puntino a liste di interi contenenti rispettivamente i
numeri pari e dispari contenuti nella lista l.
Ad esempio, se l punta ad una lista contenente i numeri 1, 5, 6, 4, 9 allora dopo
l’esecuzione dell’istruzione split(l,p,d); la variabile p punterà ad una lista contenente i
numeri 6 e 4, mentre la variabile d punterà ad una lista contenente i numeri 1, 5 e 9.
Se ritieni opportuno utilizza (e codifica) altre funzioni.
Scrivi l’istruzione di chiamata, definisci (e se necessario, inizializza) le variabili, indica
infine la direzionalità dei parametri.
void split(elem *lista, elem *&pari, elem *&dispari) //I – O - O
{
while(lista)
{
if(lista->num %2 == 0)
insert2(pari, lista->num);
else
insert2(dispari, lista->num);
lista=lista->next;
}
}
void insert(elem *&l, int el) // I/O - I
{
if(!l)
{
l=new elem;
l->num=el;
l->next=NULL;
}
else
insert(l->next, el);
}
elem * list;
elem * puntPari=NULL;
elem * puntDispari=NULL;
split(list,puntPari, puntDispari);