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

Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: