-
Notifications
You must be signed in to change notification settings - Fork 0
/
Circular Link List.cpp
162 lines (152 loc) · 3.78 KB
/
Circular Link List.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/*
*******************************
Q.3::-Create two circular linked lists and find their maximum numbers. Merge the
two circular linked lists such that the maximum number of 2nd circular linked list
immediately follows the maximum number of the 1st circular linked list.
Input:
12 -> 28 -> 18 -> 25 -> 19 -> NULL
5 -> 24 -> 12 -> 6 -> 15 -> NULL
Output: 12 -> 28 -> 24 -> 12 -> 6 -> 15 -> 5 -> 18 -> 25 -> 19 -> NULL
*******************************
*/
#include<iostream>
using namespace std;
class node
{
public:
int data;
node *link;
//constructer
node(int d)
{
data=d;
link=NULL;
}
};
class circularList
{
public:
node *head,*tail;
public:
//constructor
circularList()
{
head=tail=NULL;
}
//functionn for insertion of elements circular List
void insertIntoList(int element)
{
node *temp=new node(element);
if(head==NULL)
{
tail=head=temp;
temp->link=head;
}
else
{
temp->link=head;
tail->link=temp;
tail=temp;
}
}
//function to dispaly circular List
void display()
{
node *temp=NULL;
temp=head;
if(head==NULL)
{
cout<<"Circular List is Empty!!!";
return;
}
cout<<temp->data<<"->";
temp=temp->link;
while(temp!=head)
{
cout<<temp->data<<" -> ";
temp=temp->link;
}
}
/*function too merge to lists
By finding the position of max term in each of the list
here we are merging them just by changing a few links
*/
void merge(node *max1,node *max2)
{ node *temp1,*temp2;
temp1=max1->link;
temp2=max2;
max1->link=max2;
while(temp2->link!=max2)
{
temp2=temp2->link;
}
temp2->link=temp1;
}
//to get position of max element
node* maxElement()
{
node *temp=NULL,*p=NULL;
p=head;
temp=head->link;
while(temp!=head)
{
if(temp->data > p->data)
p=temp;
temp=temp->link;
}
return p;
}
};
//int main()
int main()
{
int choice,l,data;
circularList c1,c2,c3;
node *max1,*max2;
while(1)
{
//List of operations
cout<<"\nChoose Operation You whould like to perform"
<<"\n1.Insertion in list"
<<"\n2.Display List"
<<"\n3.Merge two list"
<<"\n4.Exit::::";
cin>>choice;
//switch to work according to user choice
switch(choice)
{
case 1:cout<<"\nEnter element:";
cin>>data;
cout<<"In which list you want to insert element[1,2]::";
cin>>l;
if(l==1)
{
c1.insertIntoList(data);
}
else if(l==2)
{
c2.insertIntoList(data);
}
else
cout<<"Invalid List Choice!!!";
break;
case 2:cout<<"\nList 1::";
c1.display();
cout<<"NULL";
cout<<"\nList 2::";
c2.display();
cout<<"NULL";
break;
case 3:c1.maxElement();
max1=c1.maxElement();
max2=c2.maxElement();
c1.merge(max1,max2);
cout<<"\nList after Merge::";
c1.display();
break;
case 4:exit(0);
default:cout<<"\nINVALID CHOICE!!!!";
}
}
return 0;
}