### Merging of Two Circular Lists

You can merge two lists into one list. The following program merges two circular lists.

```# include <stdio.h>
# include <stdlib.h>
struct node
{
int data;
};

struct node *insert(struct node *p, int n)
{
struct node *temp;
/* if the existing list is empty then insert a new node as the
starting node */
if (p == NULL)
{
p = (struct node *) malloc(sizeof(struct node)); /* creates new node
data value passes
as parameter */

if (p == NULL)
{
printf("Error\n");
exit(0);
}
p->data = n;
p->link = p; /* makes the pointer pointing to itself because it
is a circular list*/
}
else
{
temp = p;
/* traverses the existing list to get the pointer to the last node of
it */
temp->link = (struct node *) malloc(sizeof(struct node)); /*
creates new node using
data value passes as
parameter and puts its
of last node of the
existing list*/
{
printf("Error\n");
exit(0);
}
temp->data = n;
}
return (p);
}
void printlist(struct node *p)
{
struct node *temp;
temp = p;
printf("The data values in the list are\n");
if (p != NULL)
{
do
{
printf("%d\t", temp->data);
} while (temp != p);
}
else
printf("The list is empty\n");
}
struct node *merge(struct node *p, struct node *q)
{
struct node *temp = NULL;
struct node *r = NULL;
r = p;
temp = p;
temp = q;
return (r);
}

int main()
{
int n;
int x;
struct node *start1 = NULL;
struct node *start2 = NULL;
struct node *start3 = NULL;

/* this will create the first circular list nodes*/
printf("Enter the number of nodes in the first list \n");
scanf("%d", &n);
while (n-- > 0)
{
printf("Enter the data value to be placed in a node\n");
scanf("%d", &x);
start1 = insert(start1, x);
}
printf("The first list is\n");
printlist(start1);

/* this will create the second circular list nodes*/
printf("Enter the number of nodes in the second list \n");
scanf("%d", &n);
while (n-- > 0)
{
printf("Enter the data value to be placed in a node\n");
scanf("%d", &x);
start2 = insert(start2, x);
}
printf("The second list is:\n");
printlist(start2);

start3 = merge(start1, start2);
printf("The resultant list is:\n");
printlist(start3);
getchar();
return 0;
}
```

In order to merge or concatenate the two non-empty circular lists pointed to by p and q, it is required to make the start of the resultant list p. Then the list pointed to by p is required to be traversed until its end, and the link field of the last node must become the pointer q. After that, the list pointed to by q is required to be traversed until its end, and the link field of the last node is required to be made p. 