DEV Community

Dhanashree Rugi
Dhanashree Rugi

Posted on

Create a Copy of a Linked List

For a given linked list, you are supposed to write a function that creates a copy of the already created linked list.

Example 1:
Input : Linked List : 4 6 2 8 1
Output : Copy of linked list : 4 6 2 8 1

Example 2:
Input : Linked List : 4 5 9 8 2
Output : Copy of linked list : 4 5 9 8 2

Explanation:

  • Logic behind this is just create a new node of structure and copy the every existing node to new node.
  • Process will continue until the existing list leads to null(recursively).

C program that creates the copy of linked list:

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

struct node
{
    int data;
    struct node * next;
};

void displayLL(struct node * head)
{
    struct node * temp;
    temp = head;
    temp=head;
    while(temp!=0)
    {
       printf("%d ",temp->data);
       temp = temp->next;
    }
}

void copy(struct node *head)
{
    struct node *temp = head;
    struct node *temp1, *temp2, *head1;

    temp1 = (struct node *)malloc(sizeof(struct node));
    temp1->next = NULL;
    temp1->data = temp->data;
    head1 = temp1;
    temp1->next = NULL;
    temp = temp->next;

    while(temp != NULL)
    {
       temp2 = (struct node *)malloc(sizeof(struct node));
       temp2->data = temp->data;
       temp1->next = temp2;
       temp1 = temp2;
       temp = temp->next;
    }
    printf("\n--------------------------------\n");
    printf("Copy of original linked list : ");
    displayLL(head1);
}

int main()
{
   struct node *head = 0, *newnode, *temp; 
   int n, choice, newdata;

// Create Linked List // 

   printf("Enter the number of nodes in the list : ");
   scanf("%d", &n);

   if(n == 0)
   {
      printf("--------------------------------\n");
      printf("Linked list cannot be empty");
      exit(0);
    } 

   for(int i = 1; i<=n; i++)
   {
     newnode = (struct node *)malloc(sizeof(struct node));
     printf("Enter the data%d : ", i);
     scanf("%d", &newnode->data);
     newnode->next = 0;
     if(head == 0)
     {
        head = temp = newnode;
     } 
     else
       { 
        temp->next = newnode;
        temp = newnode;
       }
    }
   printf("--------------------------------\n");
   printf("Original linked list : ");
   displayLL(head);
   copy(head);
}
Enter fullscreen mode Exit fullscreen mode

Output:

Enter the number of nodes in the list : 4
Enter the data1 : 3
Enter the data2 : 7
Enter the data3 : 3
Enter the data4 : 8
--------------------------------
Original linked list : 3 7 3 8 
--------------------------------
Copy of original linked list : 3 7 3 8 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)