#include <stdio.h>
#include <stdlib.h>
struct nodoLista {
int valore;
struct nodoLista *nextPtr;
};
typedef struct nodoLista Lista;
// Prototipi
void print_list(Lista *ptr);
void pre_insert(Lista **ptrPtr, int val);
void clone_reverse(Lista *src, Lista **destPtr);
int main() {
Lista *lista_originale = NULL;
Lista *lista_inversa = NULL;
// Se la tua pre_insert funziona, questa serie di inserimenti
// creerà la lista: 30 -> 20 -> 10
pre_insert(&lista_originale, 10);
pre_insert(&lista_originale, 20);
pre_insert(&lista_originale, 30);
printf("Lista Originale (Atteso: 30 20 10): ");
print_list(lista_originale);
// Chiamata alla tua funzione di clonazione
clone_reverse(lista_originale, &lista_inversa);
printf("Lista Invertita (Atteso: 10 20 30): ");
print_list(lista_inversa);
return 0;
}
// Funzione di stampa fornita
void print_list(Lista *ptr) {
while(ptr != NULL) {
printf("%d ", ptr->valore);
ptr = ptr->nextPtr;
}
printf("\n");
}
/* ========================================================================= */
/* ESERCIZIO DELLO STUDENTE */
/* ========================================================================= */
/* PRE: 'ptrPtr' punta all'indirizzo della testa della lista. 'val' è il numero da inserire.
* POST: Viene allocato un nuovo nodo contenente 'val' e viene inserito in CIMA alla lista.
*/
void pre_insert(Lista **ptrPtr, int val) {
Lista *tmp = (Lista *)malloc(sizeof(Lista));
tmp->valore = val;
tmp->nextPtr = *ptrPtr;
*ptrPtr = tmp;
}
/* PRE: 'src' è la lista da copiare. 'destPtr' è l'indirizzo della nuova lista (inizializzata a NULL).
* POST: 'destPtr' conterrà una NUOVA lista in memoria con i valori di 'src' invertiti.
*/
void clone_reverse(Lista *src, Lista **destPtr) {
if(src == NULL)
return;
pre_insert(destPtr, src->valore);
clone_reverse(src->nextPtr, destPtr);
}
To embed this project on your website, copy the following code and paste it into your website's HTML: