//C program for the above approach
#include <stdio.h>
#include<stdlib.h>

//Node for linked list
struct Node {
    int data;
    struct Node*next;
};

//Function to print given linked list
void printList(struct Node* head)
{
    struct Node*ptr=head;
    while(ptr) {

        printf("%d->",ptr->data);
        ptr=ptr->next;
    }

    printf("NULL");
}

//Function to create a new node
void insert(struct Node**head_ref,int data)
{
    //Allocate the memory for new node
    //in the heap and set its data
    struct Node*newNode
        =(struct Node*)malloc(
           sizeof(struct Node));   

    newNode->data=data;

    //Set the next node pointer of the
    //new Node to point to the current
    //node in the list
    newNode->next= *head_ref;

    //Change the pointer of head to point
    //to the newNode
    *head_ref=newNode;
}

//Function to create copy of a linked list
struct Node* copyList(struct Node*head)
{
    if(head==NULL){
        return NULL;
    }
    else{
        
        //Allocate the memory for new Node
        //in the heap and sets its data
        struct Node* newNode
            =(struct Node*)malloc(
               sizeof(struct Node));

        newNode->data=head->data;

        //Recursively set the new pointer of
        //the new Node by recurring for the
        //remaining nodes
        newNode->next=copyList(head->next);

        return newNode;
    }
}

//Function to create new linked list
struct Node*create(int arr[],int N)
{
    //Pointer to point the head node
    //of the singly linked list
    struct Node* head_ref=NULL;

    //Construct the linked list
    for(int i=N-1;i>=0;i--){

        insert(&head_ref,arr[i]);
    }

    //Return the head pointer
    return head_ref;
}

//Function to create both the lists
void printLists(struct Node* head_ref,
                  struct Node* dup)
{

    printf("Original list: ");

    //Print the original linked list
    printList(head_ref);

    printf("\nDuplicate list: ");

    //Print duplicate linked list
    printList(dup);
}

//Driver code
int main(void) 
{
    //Give nodes value
    int arr[]={1,2,3,4,5};
    int N=sizeof(arr)/sizeof(arr[0]);

    //Head of the original ;Linked list
    struct Node* head_ref=create(arr,N);

    //Head of the duplicate Linked list
    struct Node*dup=copyList(head_ref);
    
    printLists(head_ref, dup);
    
    return 0;
}

Embed on website

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