C Program To Create Two Singly Linked List and Perform Following Operation

How to write a C Program to Create Two Singly Linked List and Perform Following Operation:
  1. Difference of Two List
  1. Union of Two List
  1. Display
  1. Exit




Solution:
/*write a c program to create two singly linked list and perform
following operation
-differences of two list
-union of two list
-display
-exit
*/
#include<stdio.h>
#include<conio.h>
#include<alloc.h>
struct node
{
int data;
struct node *next;
}*start1=NULL,*start2=NULL,*q1,*q2,*temp1,*temp2;
int n1=0,n2=0,*p1,*p2,i,j;
void create();
void display();
void differ();
void unio();
void main()
{
clrscr();
create();
display();
differ();
unio();
getch();
}
void create()
{
char ch='y';
while(ch=='y'||ch=='Y')
{
temp1=malloc(sizeof(struct node));
printf("\nenter the number for first L.L:-");
scanf("%d",&temp1->data);
temp1->next=NULL;
n1++;
if(start1==NULL)
start1=temp1;
else
{
q1=start1;
while(q1->next!=NULL)
{
q1=q1->next;
}
q1->next=temp1;
}
printf("\ndo you want to continue(Y|N):-");
scanf("\n%s",&ch);
}
ch='y';
while(ch=='y'||ch=='Y')
{
temp2=malloc(sizeof(struct node));
printf("\nenter the number for second L.L:-");
scanf("%d",&temp2->data);
temp2->next=NULL;
n2++;
if(start2==NULL)
start2=temp2;
else
{
q2=start2;
while(q2->next!=NULL)
{
q2=q2->next;
}
q2->next=temp2;
}
printf("\ndo you want to continue(Y|N):-");
scanf("\n%s",&ch);
}
}
void display()
{
p1=(int *)malloc(n1*sizeof(int));
p2=(int *)malloc(n2*sizeof(int));
if(start1==NULL)
printf("\nlinked list is empty");
else
{
printf("\nelement in first linked list are:-\n");
q1=start1;
for(i=0;i<n1;i++)
{
if(q1!=NULL)
{
*(p1+i)=q1->data;
printf("%d\n",*(p1+i));
q1=q1->next;
}
}
}
if(start2==NULL)
printf("\nlinked list is empty");
else
{
printf("\nelement in second linked list are:-\n");
q2=start2;
for(i=0;i<n2;i++)
{
if(q2!=NULL)
{
*(p2+i)=q2->data;
printf("%d\n",*(p2+i));
q2=q2->next;
}
}
}
}
void differ()
{
printf("\ndifferences of two sets are:-\n");
for(i=0;i<n1;i++)
{
for(j=0;j<n2;j++)
{
if(*(p1+i)==*(p2+j))
break;
}
if(j==n2)
printf("%d\n",*(p1+i));
}
}
void unio()
{
printf("\nunion of two sets are:-\n");
for(i=0;i<n1;i++)
{
printf("%d\n",*(p1+i));
}
for(i=0;i<n2;i++)
{
for(j=0;j<n1;j++)
{
if((*(p2+i)==*(p1+j)))
break;
}
if(j==n1)
printf("%d\n",*(p2+i));
}
}
/*
enter the number for first L.L:-5                                            
                                                                             
do you want to continue(Y|N):-y                                              
                                                                             
enter the number for first L.L:-2                                            
                                                                             
do you want to continue(Y|N):-y                                              
                                                                             
enter the number for first L.L:-9

do you want to continue(Y|N):-n

enter the number for second L.L:-2

do you want to continue(Y|N):-n

element in first linked list are:-
5
2
9

element in second linked list are:-
2

differences of two sets are:-
5
9

union of two sets are:-
5
2
9
*/


Learn More :