It took memory but time consumption will be less.
Create a temp list and traverse the main list using recursive, make copy of each node while traversing.
HEAD *temp;
fun(HEAD *main)
{
if(main == NULL)
return NULL
make_copy(temp, main); // have to move temp to temp->next
fun(main->next);
make_copy(temp, main); // have to move temp to temp->next
}
print(temp);