#include <stdio.h>
#include <stdlib.h>

typedef struct nodoLista{
    int valore;
    struct nodoLista *nextPtr;
} Lista;

void print_list(Lista *ptr);
void ord_insert(Lista **ptrPtr, int val);
void clone_list(Lista *srcPtr, Lista **destPtr);
void print_list_inv(Lista *ptr);

int main() {

    Lista *mylist = NULL;

    ord_insert(&mylist , 29);
    ord_insert(&mylist , 5);
    ord_insert(&mylist , 32);
    ord_insert(&mylist , 93);
    print_list(mylist);

    Lista *clonedlist = NULL;
    clone_list(mylist, &clonedlist);
    print_list_inv(clonedlist);

    return 0;

}

void print_list(Lista *ptr) {
    while (ptr != NULL) {
        printf("%d ", ptr->valore);
        ptr = ptr->nextPtr;
    }
    printf("\n");
}

void ord_insert(Lista **ptrPtr, int val){

    while(*ptrPtr != NULL && (*ptrPtr)->valore < val){
        ptrPtr = &((*ptrPtr)->nextPtr);
    }

    Lista *nuovo_nodo = (Lista *)malloc(sizeof(Lista)); 
    nuovo_nodo->valore = val;
    nuovo_nodo->nextPtr = *ptrPtr;
    //modifico il (*ptrPtr)->nextPtr
    *ptrPtr = nuovo_nodo;

}

void clone_list(Lista *srcPtr, Lista **destPtr){
    if(srcPtr == NULL){
        *destPtr = NULL; // <-- CORRETTO: chiudiamo la catena
        return;
    }
    
    *destPtr = (Lista *)malloc(sizeof(Lista));
    (*destPtr)->valore = srcPtr->valore; 
    clone_list(srcPtr->nextPtr, &((*destPtr)->nextPtr));
}

void print_list_inv(Lista *ptr){

    if(ptr==NULL)
        return;
    print_list_inv(ptr->nextPtr);
    printf("%d ", ptr->valore);
} 

Embed on website

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