You are on page 1of 70

1.

Program to create and display a singly linked list

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

typedef struct NODE_sll{


int data;
struct NODE_sll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void display(node *t){
if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void add_list(int data){
new_node = create_node(data);
if(!root)
root = new_node;
else{
tmp = root;
while(tmp->next)
tmp = tmp->next;
tmp->next = new_node;
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
return 0;
}

Page | 1
2. Program to create a singly linked list of n nodes and count the number of nodes

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

typedef struct NODE_sll{


int data;
struct NODE_sll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
int count_node(node *t){
if(!t)
return 0;
else
return (1 + count_node(t->next));
}
void add_list(int data){
new_node = create_node(data);
if(!root)
root = new_node;
else{
tmp = root;
while(tmp->next)
tmp = tmp->next;
tmp->next = new_node;
}

int main()
{
int i,n,data;
printf("Enter total number of data: ");
scanf("%d",&n);
printf("\n");
for(i=0; i<n; i++){
printf("Enter Data %2d: ",i+1);
scanf("%d",&data);
add_list(data);
}
printf("\nTotal numbers of nodes are: %d\n",count_node(root));
return 0;
}

Page | 2
3. Program to create a singly linked list of n nodes and display it in reverse order

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

typedef struct NODE_sll{


int data;
struct NODE_sll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node,*back_list=NULL;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}

void reverse_list(){
if(!root)
return;
tmp = root;
while(tmp){
new_node = create_node(tmp->data);
new_node->next = back_list;
back_list = new_node;
tmp = tmp->next;
}
}

void display(node *t){


if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}
}

void add_list(int data){


new_node = create_node(data);
if(!root)
root = new_node;
else{
tmp = root;
while(tmp->next)
tmp = tmp->next;
tmp->next = new_node;
}
}
int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
reverse_list();

Page | 3
printf("\nData after reversing are follows:-\n");
display(back_list);
return 0;
}

Page | 4
4. Program to delete a new node from the beginning of the singly linked list

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

typedef struct NODE_sll{


int data;
struct NODE_sll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node;


node* create_node(int data){
new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void delete_top(){
if(!root)
return;
tmp=root;
root = root->next;
free(tmp);
}
void display(node *t){
if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}
}
void add_list(int data){
new_node = create_node(data);
if(!root)
root = new_node;
else{
tmp = root;
while(tmp->next)
tmp = tmp->next;
tmp->next = new_node;
}
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
delete_top();
printf("\nData after Deleting first node are follows:-\n");
display(root);
return 0;
}

Page | 5
5. Program to delete a new node from the middle of the singly linked list

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

typedef struct NODE_sll{


int data;
struct NODE_sll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
int count_element(node *t){
if(!t)
return 0;
return (1 + count_element(t->next));
}
void delete_middle(){
int i=0,n = count_element(root);
if(!root || !root->next)
return;
tmp=root;
while(i++<(n/2-1))
tmp = tmp->next;
tmp->next = tmp->next->next;
}
void display(node *t){
if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void add_list(int data){
new_node = create_node(data);
if(!root)
root = new_node;
else{
tmp = root;
while(tmp->next)
tmp = tmp->next;
tmp->next = new_node;
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");

Page | 6
display(root);
delete_middle();
printf("\nData after Deleting middle node are follows:-\n");
display(root);
return 0;
}

Page | 7
6. Program to delete a node from the end of the singly linked list

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

typedef struct NODE_sll{


int data;
struct NODE_sll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void delete_end(){
if(!root)
return;
if(!root->next){
root = NULL;
return;
}
tmp=root;
while(tmp->next->next)
tmp = tmp->next;
tmp->next = NULL;
}
void display(node *t){
if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void add_list(int data){
new_node = create_node(data);
if(!root)
root = new_node;
else{
tmp = root;
while(tmp->next)
tmp = tmp->next;
tmp->next = new_node;
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
delete_end();

Page | 8
printf("\nData after Deleting end node are follows:-\n");
display(root);
return 0;
}

Page | 9
7. Program to determine whether a singly linked list is the palindrome

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

typedef struct NODE_sll{


int data;
struct NODE_sll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node,*back_list=NULL;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
int count_element(node *t){
if(!t)
return 0;
return (1 + count_element(t->next));
}

void check_palindrome(){
int i=0,n,flag=1;
node *t = root;
tmp = root;
if(!tmp){
printf("\nNOTHING in list.");
return;
}
n = count_element(root);
n = ((n%2)?(n/2 + 1):(n/2));
while(i++ < n)
t = t->next;
while(t){
new_node=create_node(t->data);
new_node->next = back_list;
back_list = new_node;
t = t->next;
}
t = back_list;
n = ((n%2)?(n-1):n);
for(i=0; i<n; i++){
if(tmp->data != t->data){
flag = 0;
break;
}
else{
tmp=tmp->next;
t=t->next;
}
}
if(flag)
printf("\nGiven list is palindrome.");
else
printf("\nGiven list is not palindrome.");
}

void display(node *t){


if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);

Page | 10
display(t->next);
}
}

void add_list(int data){


new_node = create_node(data);
if(!root)
root = new_node;
else{
tmp = root;
while(tmp->next)
tmp = tmp->next;
tmp->next = new_node;
}
}
int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
check_palindrome();
return 0;
}

Page | 11
8. Program to find the maximum and minimum value node from a singly linked list

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

typedef struct NODE_sll{


int data;
struct NODE_sll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void display(node *t){
if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void add_list(int data){
new_node = create_node(data);
if(!root)
root = new_node;
else{
tmp = root;
while(tmp->next)
tmp = tmp->next;
tmp->next = new_node;
}

}
void maximum(){
int m;
if(!root){
printf("\nADD data first.");
return;
}
m = root->data;
tmp = root->next;
while(tmp){
if(tmp->data>m)
m = tmp->data;
tmp = tmp->next;
}
printf("\nMAXIMUM from the list is %d.",m);
}

void minimum(){
int m;
if(!root){
printf("\nADD data first.");
return;
}
m = root->data;
tmp = root->next;
while(tmp){
if(tmp->data<m)

Page | 12
m = tmp->data;
tmp = tmp->next;
}
printf("\nMINIMUM from the list is %d.",m);
}
int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
maximum();
minimum();
return 0;
}

Page | 13
9. Program to insert a new node at the beginning of the singly linked list

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

typedef struct NODE_sll{


int data;
struct NODE_sll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void display(node *t){
if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void add_list(int data){
new_node = create_node(data);
if(!root)
root = new_node;
else{
tmp = root;
while(tmp->next)
tmp = tmp->next;
tmp->next = new_node;
}
}
int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
printf("\nENTER any data to add at beginning: ");
scanf("%d",&data);
new_node = create_node(data);
if(root)
tmp = root;
root = new_node;
if(tmp)
root->next = tmp;
printf("\nData after insertion are follows:-\n");
display(root);
return 0;
}

Page | 14
10. Program to insert a new node at the end of the singly linked list

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

typedef struct NODE_sll{


int data;
struct NODE_sll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node;


node* create_node(int data){
new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void display(node *t){
if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void add_list(int data){
new_node = create_node(data);
if(!root)
root = new_node;
else{
tmp = root;
while(tmp->next)
tmp = tmp->next;
tmp->next = new_node;
}
}
int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
printf("\nENTER any data to add at end: ");
scanf("%d",&data);
add_list(data);
printf("\nData after insertion are follows:-\n");
display(root);
return 0;
}

Page | 15
11. Program to insert a new node at the middle of the singly linked list

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

typedef struct NODE_sll{


int data;
struct NODE_sll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void display(node *t){
if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
int count_element(node *t){
if(!t)
return 0;
return (1 + count_element(t->next));
}
void add_middle(int n,int data){
int i=0;
tmp = root;
while(tmp && i<(n/2-1)){
tmp = tmp->next;
i++;
}
new_node = create_node(data);
new_node->next = tmp->next;
tmp->next = new_node;
}
void add_list(int data){
new_node = create_node(data);
if(!root)
root = new_node;
else{
tmp = root;
while(tmp->next)
tmp = tmp->next;
tmp->next = new_node;
}
}
int main()
{
int n,data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");

Page | 16
display(root);
n = count_element(root);
printf("Enter data to add in middle: ");
scanf("%d",&data);
add_middle(n,data);
printf("\nData after insertion are follows:-\n");
display(root);
return 0;
}

Page | 17
12. Program to remove duplicate elements from a singly linked list

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

typedef struct NODE_sll{


int data;
struct NODE_sll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void display(node *t){
if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void remove_duplicate(){
int m;
node *t;
if(!root)
return;
tmp = root;
while(tmp && tmp->next){
t = tmp;
while(t->next){
if(t->next->data == tmp->data){
t->next = t->next->next;
}
else
t = t->next;
}
tmp = tmp->next;
}

}
void add_list(int data){
new_node = create_node(data);
if(!root)
root = new_node;
else{
tmp = root;
while(tmp->next)
tmp = tmp->next;
tmp->next = new_node;
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);

Page | 18
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
remove_duplicate();
printf("\nData after removing duplicates are follows:-\n");
display(root);
return 0;
}

Page | 19
13. Program to search an element in a singly linked list

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

typedef struct NODE_sll{


int data;
struct NODE_sll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node;


node* create_node(int data){
new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void display(node *t){
if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}
}
int search_element(int key,node *t){
if(!t)
return 0;
else if(t->data == key)
return 1;
else
return search_element(key , t->next);
}
void add_list(int data){
new_node = create_node(data);
if(!root)
root = new_node;
else{
tmp = root;
while(tmp->next)
tmp = tmp->next;
tmp->next = new_node;
}
}
int main()
{
int data,key;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
printf("\nNOW enter the key to search: ");
scanf("%d",&key);
if(search_element(key,root))
printf("\nKEY Found.\n");
else
printf("\nKEY not Found.\n");
return 0;
}

Page | 20
14. Program to sort the elements of the singly linked list

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

typedef struct NODE_sll{


int data;
struct NODE_sll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void display(node *t){
if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void sort_element(){
int m;
node *t,*d;
if(!root)
return;
tmp = root;
while(tmp->next){
d = tmp;
t = tmp->next;
while(t){
if(t->data < d->data)
d = t;
t = t->next;
}
m = d->data;
d->data = tmp->data;
tmp->data = m;
tmp = tmp->next;
}

}
void add_list(int data){
new_node = create_node(data);
if(!root)
root = new_node;
else{
tmp = root;
while(tmp->next)
tmp = tmp->next;
tmp->next = new_node;
}
}
int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);

Page | 21
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
sort_element();
printf("\nData after sorting are follows:-\n");
display(root);
return 0;
}

Page | 22
15. Program to swap the last element of the singly linked list from the first one

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

typedef struct NODE_sll{


int data;
struct NODE_sll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node;

void swap_element(){
node *t = root;
tmp = root;
if(!root || !root->next)
return;
if(!root->next->next){
tmp = root->next;
tmp->next = root;
tmp = root;
root= root->next;
tmp->next = NULL;
return;
}
while(tmp->next->next)
tmp = tmp->next;
root = tmp->next;
root->next = t->next;
tmp->next = t;
t->next = NULL;
}

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void display(node *t){
if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void add_list(int data){
new_node = create_node(data);
if(!root)
root = new_node;
else{
tmp = root;
while(tmp->next)
tmp = tmp->next;
tmp->next = new_node;
}
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");

Page | 23
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
swap_element();
printf("\nData after swapping are follows:-\n");
display(root);
return 0;
}

Page | 24
16. Program to Create and Display a Doubly Linked List

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

typedef struct NODE_dll{


struct NODE_dll *prv;
int data;
struct NODE_dll *next;
}node;
node *root = NULL, *tmp=NULL, *new_node,*last=NULL;
node* create_node(int data){
new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->prv = NULL;
new_node->next = NULL;
return new_node;
}
void display(node *t){
if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}
}
void add_list(int data){
new_node = create_node(data);
if(!root){
root = new_node;
last = root;
}
else{
new_node->prv = last;
last->next = new_node;
last = new_node;
}
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
return 0;
}

Page | 25
17. Program to Delete a New Node From the Beginning of the Doubly Linked List

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

typedef struct NODE_dll{


struct NODE_dll *prv;
int data;
struct NODE_dll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node,*last=NULL;


node* create_node(int data){
new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->prv = NULL;
new_node->next = NULL;
return new_node;
}

void delete_first(){
if(!root)
return;
if(!root->next){
root = NULL;
last = root;
return;
}
tmp = root;
root = root->next;
root->prv = NULL;
free(tmp);
}
void display(node *t){
if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}
}
void add_list(int data){
new_node = create_node(data);
if(!root){
root = new_node;
last = root;
}
else{
new_node->prv = last;
last->next = new_node;
last = new_node;
}
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
Page | 26
display(root);
delete_first();
printf("\nList after deleting first are follows:-\n");
display(root);
return 0;
}

Page | 27
18. Program to Delete a New Node From the End of the Doubly Linked List

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

typedef struct NODE_dll{


struct NODE_dll *prv;
int data;
struct NODE_dll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node,*last=NULL;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->prv = NULL;
new_node->next = NULL;
return new_node;
}

void delete_last(){
if(!last)
return;
if(!root->next){
root = NULL;
last = root;
return;
}
tmp = last;
last = last->prv;
last->next = NULL;
free(tmp);
}

void display(node *t){


if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void add_list(int data){
new_node = create_node(data);
if(!root){
root = new_node;
last = root;
}
else{
new_node->prv = last;
last->next = new_node;
last = new_node;
}
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
Page | 28
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
delete_last();
printf("\nList after deleting last are follows:-\n");
display(root);
return 0;
}

Page | 29
19. Program to Delete a New Node From the Middle of the Doubly Linked List

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

typedef struct NODE_dll{


struct NODE_dll *prv;
int data;
struct NODE_dll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node,*last=NULL;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->prv = NULL;
new_node->next = NULL;
return new_node;
}

int count_element(node *t){


if(!t)
return 0;
return (1 + count_element(t->next));
}

void delete_middle(){
int i=0,n;
if(!root)
return;
if(!root->next){
root = NULL;
last = root;
return;
}
n = count_element(root);
tmp = root;
while(i++<(n/2-1))
tmp = tmp->next;
node *t = tmp->next;
if(t->next)
t->next->prv = tmp;
tmp->next = t->next;
free(t);
}

void display(node *t){


if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void add_list(int data){
new_node = create_node(data);
if(!root){
root = new_node;
last = root;
}
else{
new_node->prv = last;
last->next = new_node;

Page | 30
last = new_node;
}
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
delete_middle();
printf("\nList after deleting middle are follows:-\n");
display(root);
return 0;
}

Page | 31
20. Program to Find the Maximum and Minimum Value Node From a Doubly Linked List

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

typedef struct NODE_dll{


struct NODE_dll *prv;
int data;
struct NODE_dll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node,*last=NULL;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->prv = NULL;
new_node->next = NULL;
return new_node;
}

void maximum(){
int m;
if(!root){
printf("\nADD data first.");
return;
}
m = root->data;
tmp = root->next;
while(tmp){
if(tmp->data>m)
m = tmp->data;
tmp = tmp->next;
}
printf("\nMAXIMUM from the list is %d.",m);
}

void minimum(){
int m;
if(!root){
printf("\nADD data first.");
return;
}
m = root->data;
tmp = root->next;
while(tmp){
if(tmp->data<m)
m = tmp->data;
tmp = tmp->next;
}
printf("\nMINIMUM from the list is %d.",m);
}

void display(node *t){


if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void add_list(int data){

Page | 32
new_node = create_node(data);
if(!root){
root = new_node;
last = root;
}
else{
new_node->prv = last;
last->next = new_node;
last = new_node;
}
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
maximum();
minimum();
return 0;
}

Page | 33
21. Program to Insert a New Node at the Beginning of the Doubly Linked List

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

typedef struct NODE_dll{


struct NODE_dll *prv;
int data;
struct NODE_dll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node,*last=NULL;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->prv = NULL;
new_node->next = NULL;
return new_node;
}

void add_at_first(int data){


new_node = create_node(data);
new_node->next = root;
root->prv = new_node;
root = new_node;
}

void display(node *t){


if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void add_list(int data){
new_node = create_node(data);
if(!root){
root = new_node;
last = root;
}
else{
new_node->prv = last;
last->next = new_node;
last = new_node;
}
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
printf("\nENTER data to add at last: ");
scanf("%d",&data);
add_at_first(data);

Page | 34
printf("\nList after adding element at first are follows:-\n");
display(root);
return 0;
}

Page | 35
22. Program to Insert a New Node at the End of Doubly Linked List

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

typedef struct NODE_dll{


struct NODE_dll *prv;
int data;
struct NODE_dll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node,*last=NULL;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->prv = NULL;
new_node->next = NULL;
return new_node;
}

void add_at_last(int data){


new_node = create_node(data);
last->next = new_node;
new_node->prv = last;
last = new_node;
}

void display(node *t){


if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void add_list(int data){
new_node = create_node(data);
if(!root){
root = new_node;
last = root;
}
else{
new_node->prv = last;
last->next = new_node;
last = new_node;
}
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
printf("\nENTER data to add at last: ");
scanf("%d",&data);
add_at_last(data);

Page | 36
printf("\nList after adding element at last are follows:-\n");
display(root);
return 0;
}

Page | 37
23. Program to Insert a New Node at the Middle of Doubly Linked List

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

typedef struct NODE_dll{


struct NODE_dll *prv;
int data;
struct NODE_dll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node,*last=NULL;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->prv = NULL;
new_node->next = NULL;
return new_node;
}

int count_element(node *t){


if(!t)
return 0;
return (1 + count_element(t->next));
}
void add_at_middle(int data){
int i=0,n;
n = count_element(root);
new_node = create_node(data);
tmp = root;
while(tmp && i<(n/2-1)){
tmp = tmp->next;
i++;
}
new_node->next = tmp->next;
tmp->next->prv = new_node;
tmp->next = new_node;
new_node->prv = tmp;
}

void display(node *t){


if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void add_list(int data){
new_node = create_node(data);
if(!root){
root = new_node;
last = root;
}
else{
new_node->prv = last;
last->next = new_node;
last = new_node;
}
}

int main()
{

Page | 38
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
printf("\nENTER data to add at last: ");
scanf("%d",&data);
add_at_middle(data);
printf("\nList after adding element at middle are follows:-\n");
display(root);
return 0;
}

Page | 39
24. Program to Remove Duplicate Elements From a Doubly Linked List

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

typedef struct NODE_dll{


struct NODE_dll *prv;
int data;
struct NODE_dll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node,*last=NULL;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->prv = NULL;
new_node->next = NULL;
return new_node;
}
void remove_duplicate(){
int m;
node *t;
if(!root)
return;
tmp = root;
while(tmp && tmp->next){
t = tmp;
while(t->next){
if(t->next->data == tmp->data){
t->next = t->next->next;
}
else
t = t->next;
}
tmp = tmp->next;
}

void display(node *t){


if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void add_list(int data){
new_node = create_node(data);
if(!root){
root = new_node;
last = root;
}
else{
new_node->prv = last;
last->next = new_node;
last = new_node;
}
}

int main()
{

Page | 40
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
remove_duplicate();
printf("\nData after removing duplicates are follows:-\n");
display(root);
return 0;
}

Page | 41
25. Program to Search an Element in a Doubly Linked List

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

typedef struct NODE_dll{


struct NODE_dll *prv;
int data;
struct NODE_dll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node,*last=NULL;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->prv = NULL;
new_node->next = NULL;
return new_node;
}
int search_element(int key,node *t){
if(!t)
return 0;
else if(t->data == key)
return 1;
else
return search_element(key , t->next);
}

void display(node *t){


if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void add_list(int data){
new_node = create_node(data);
if(!root){
root = new_node;
last = root;
}
else{
new_node->prv = last;
last->next = new_node;
last = new_node;
}
}

int main()
{
int data,key;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
printf("\nNOW enter the key to search: ");
scanf("%d",&key);

Page | 42
if(search_element(key,root))
printf("\nKEY Found.\n");
else
printf("\nKEY not Found.\n");
return 0;
}

Page | 43
26. Program to Sort the Elements of the Doubly Linked List

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

typedef struct NODE_dll{


struct NODE_dll *prv;
int data;
struct NODE_dll *next;
}node;

node *root = NULL, *tmp=NULL, *new_node,*last=NULL;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->prv = NULL;
new_node->next = NULL;
return new_node;
}

void sort_element(){
int m;
node *t,*d;
if(!root)
return;
tmp = root;
while(tmp->next){
d = tmp;
t = tmp->next;
while(t){
if(t->data < d->data)
d = t;
t = t->next;
}
m = d->data;
d->data = tmp->data;
tmp->data = m;
tmp = tmp->next;
}
}

void display(node *t){


if(!t)
printf("NULL\n");
else{
printf("%d -> ",t->data);
display(t->next);
}

}
void add_list(int data){
new_node = create_node(data);
if(!root){
root = new_node;
last = root;
}
else{
new_node->prv = last;
last->next = new_node;
last = new_node;
}
}

Page | 44
int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(root);
sort_element();
printf("\nData after sorting are follows:-\n");
display(root);
return 0;
}

Page | 45
27. Program to Create a Circular Linked List of N Nodes and Count the Number of Nodes

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

typedef struct NODE_cll{


int data;
struct NODE_cll *next;
}node;

node *start = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}

int count_element(){
int c=0;
node *t = start;
if(!t)
return 0;
do{
c++;
t = t->next;
}while(t != start);
return c;
}

void display(node *t){


if(t){
do{
printf("%d -> ",t->data);
t = t->next;
}while(t != start);
}
printf("NULL\n");
}
void add_list(int data){
new_node = create_node(data);
if(!start){
start = new_node;
new_node->next = start;
}
else{
tmp = start;
while(tmp->next != start)
tmp = tmp->next;
tmp->next = new_node;
new_node->next = start;
}
}

int main()
{
int i,n,data;
printf("Enter total number of data: ");
scanf("%d",&n);
printf("\n");
for(i=0; i<n; i++){
printf("Enter Data %2d: ",i+1);
scanf("%d",&data);

Page | 46
add_list(data);
}

printf("\nENTERED Data are follows:-\n");


display(start);
printf("\nTotal number of elements in the list are: %d\n",count_element());
return 0;
}

Page | 47
28. Program to Create a Circular Linked List of N Nodes and Display it in Reverse Order

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

typedef struct NODE_cll{


int data;
struct NODE_cll *next;
}node;

node *start = NULL, *tmp=NULL, *new_node,*reverselist=NULL;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void reverse_list(){
node *t;
tmp = start;
if(!start)
return;
new_node = create_node(tmp->data);
reverselist = new_node;
reverselist->next = reverselist;
tmp=tmp->next;
while(tmp != start){
new_node = create_node(tmp->data);
t = reverselist;
while(t->next != reverselist)
t = t->next;
new_node->next = reverselist;
reverselist = new_node;
t->next = reverselist;
tmp = tmp->next;
}
}
void display(node *tmp){
node *t = tmp;
if(t){
do{
printf("%d -> ",t->data);
t = t->next;
}while(t != tmp);
}
printf("NULL\n");
}
void add_list(int data){
new_node = create_node(data);
if(!start){
start = new_node;
new_node->next = start;
}
else{
tmp = start;
while(tmp->next != start)
tmp = tmp->next;
tmp->next = new_node;
new_node->next = start;
}
}

int main()
{

Page | 48
int i,n,data;
printf("Enter total number of data: ");
scanf("%d",&n);
printf("\n");
for(i=0; i<n; i++){
printf("Enter Data %2d: ",i+1);
scanf("%d",&data);
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(start);
reverse_list();
printf("\nData after reversing are follows:-\n");
display(reverselist);
return 0;
}

Page | 49
29. Program to Create and Display a Circular Linked List

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

typedef struct NODE_cll{


int data;
struct NODE_cll *next;
}node;

node *start = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void display(node *t){
if(t){
do{
printf("%d -> ",t->data);
t = t->next;
}while(t != start);
}
printf("NULL\n");
}
void add_list(int data){
new_node = create_node(data);
if(!start){
start = new_node;
new_node->next = start;
}
else{
tmp = start;
while(tmp->next != start)
tmp = tmp->next;
tmp->next = new_node;
new_node->next = start;
}
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(start);
return 0;
}

Page | 50
30. Program to Delete a Node From the Beginning of the Circular Linked List

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

typedef struct NODE_cll{


int data;
struct NODE_cll *next;
}node;

node *start = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void delete_top(){
if(!start)
return;
if(start->next==start){
start = NULL;
return;
}
tmp = start;
while(tmp->next != start)
tmp = tmp->next;
start = start->next;
tmp->next = start;
}

void display(node *t){


if(t){
do{
printf("%d -> ",t->data);
t = t->next;
}while(t != start);
}
printf("NULL\n");
}
void add_list(int data){
new_node = create_node(data);
if(!start){
start = new_node;
new_node->next = start;
}
else{
tmp = start;
while(tmp->next != start)
tmp = tmp->next;
tmp->next = new_node;
new_node->next = start;
}
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);

Page | 51
}
printf("\nENTERED Data are follows:-\n");
display(start);
delete_top();
printf("\nList after deleting first element are follows:-\n");
display(start);
return 0;
}

Page | 52
31. Program to Delete a Node From the End of the Circular Linked List

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

typedef struct NODE_cll{


int data;
struct NODE_cll *next;
}node;

node *start = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void delete_end(){
if(!start)
return;
if(start->next==start){
start = NULL;
return;
}
tmp = start;
while(tmp->next->next != start)
tmp = tmp->next;
tmp->next = start;
}

void display(node *t){


if(t){
do{
printf("%d -> ",t->data);
t = t->next;
}while(t != start);
}
printf("NULL\n");
}
void add_list(int data){
new_node = create_node(data);
if(!start){
start = new_node;
new_node->next = start;
}
else{
tmp = start;
while(tmp->next != start)
tmp = tmp->next;
tmp->next = new_node;
new_node->next = start;
}
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}

Page | 53
printf("\nENTERED Data are follows:-\n");
display(start);
delete_end();
printf("\nList after deleting last element are follows:-\n");
display(start);
return 0;
}

Page | 54
32. Program to Delete a Node From the Middle of the Circular Linked List

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

typedef struct NODE_cll{


int data;
struct NODE_cll *next;
}node;

node *start = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
int count_element(){
int c=0;
node *t = start;
if(!t)
return 0;
do{
c++;
t = t->next;
}while(t != start);
return c;
}

void delete_middle(){
int i=0,n;
if(!start)
return;
if(start->next==start){
start = NULL;
return;
}
n = count_element();
tmp = start;
while(i++<(n/2 -1))
tmp = tmp->next;
tmp->next = tmp->next->next;
}

void display(node *t){


if(t){
do{
printf("%d -> ",t->data);
t = t->next;
}while(t != start);
}
printf("NULL\n");
}
void add_list(int data){
new_node = create_node(data);
if(!start){
start = new_node;
new_node->next = start;
}
else{
tmp = start;
while(tmp->next != start)
tmp = tmp->next;
tmp->next = new_node;

Page | 55
new_node->next = start;
}
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(start);
delete_middle();
printf("\nList after deleting middle element are follows:-\n");
display(start);
return 0;
}

Page | 56
33. Program to Find the Maximum and Minimum Value Node From a Circular Linked List

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

typedef struct NODE_cll{


int data;
struct NODE_cll *next;
}node;

node *start = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}

void maximum(){
int m;
if(!start){
printf("\nADD data first.");
return;
}
m = start->data;
tmp = start->next;
while(tmp != start){
if(tmp->data>m)
m = tmp->data;
tmp = tmp->next;
}
printf("\nMAXIMUM from the list is %d.",m);
}
void minimum(){
int m;
if(!start){
printf("\nADD data first.");
return;
}
m = start->data;
tmp = start->next;
while(tmp != start){
if(tmp->data<m)
m = tmp->data;
tmp = tmp->next;
}
printf("\nMINIMUM from the list is %d.",m);
}
void display(node *t){
if(t){
do{
printf("%d -> ",t->data);
t = t->next;
}while(t != start);
}
printf("NULL\n");
}
void add_list(int data){
new_node = create_node(data);
if(!start){
start = new_node;
new_node->next = start;
}
else{

Page | 57
tmp = start;
while(tmp->next != start)
tmp = tmp->next;
tmp->next = new_node;
new_node->next = start;
}
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(start);
maximum();
minimum();
return 0;
}

Page | 58
34. Program to Insert a New Node at the Beginning of the Circular Linked List

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

typedef struct NODE_cll{


int data;
struct NODE_cll *next;
}node;

node *start = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void add_at_top(int data){
new_node = create_node(data);
if(!start){
start = new_node;
new_node->next = start;
}
else{
tmp = start;
while(tmp->next != start)
tmp = tmp->next;
new_node->next = start;
start = new_node;
tmp->next = start;
}
}

void display(node *t){


if(t){
do{
printf("%d -> ",t->data);
t = t->next;
}while(t != start);
}
printf("NULL\n");
}
void add_list(int data){
new_node = create_node(data);
if(!start){
start = new_node;
new_node->next = start;
}
else{
tmp = start;
while(tmp->next != start)
tmp = tmp->next;
tmp->next = new_node;
new_node->next = start;
}
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)

Page | 59
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(start);
printf("\nENTER data to add at beginning: ");
scanf("%d",&data);
add_at_top(data);
printf("\nList after adding element at beginning are follows:-\n");
display(start);
return 0;
}

Page | 60
35. Program to Insert a New Node at the End of the Circular Linked List

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

typedef struct NODE_cll{


int data;
struct NODE_cll *next;
}node;

node *start = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void add_at_end(int data){
new_node = create_node(data);
if(!start){
start = new_node;
new_node->next = start;
}
else{
tmp = start;
while(tmp->next != start)
tmp = tmp->next;
new_node->next = start;
tmp->next = new_node;
}
}

void display(node *t){


if(t){
do{
printf("%d -> ",t->data);
t = t->next;
}while(t != start);
}
printf("NULL\n");
}
void add_list(int data){
new_node = create_node(data);
if(!start){
start = new_node;
new_node->next = start;
}
else{
tmp = start;
while(tmp->next != start)
tmp = tmp->next;
tmp->next = new_node;
new_node->next = start;
}
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;

Page | 61
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(start);
printf("\nENTER data to add at last: ");
scanf("%d",&data);
add_at_end(data);
printf("\nList after adding element at end are follows:-\n");
display(start);
return 0;
}

Page | 62
36. Program to Insert a New Node at the Middle of the Circular Linked List

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

typedef struct NODE_cll{


int data;
struct NODE_cll *next;
}node;

node *start = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}

int count_element(){
int c=0;
node *t = start;
if(!t)
return 0;
do{
c++;
t = t->next;
}while(t != start);
return c;
}

void add_at_middle(int data){


int i=0,n;
new_node = create_node(data);
if(!start){
start = new_node;
new_node->next = start;
}
else{
n = count_element();
tmp = start;
while(i++<(n/2-1))
tmp = tmp->next;
new_node->next = tmp->next;
tmp->next = new_node;
}
}

void display(node *t){


if(t){
do{
printf("%d -> ",t->data);
t = t->next;
}while(t != start);
}
printf("NULL\n");
}
void add_list(int data){
new_node = create_node(data);
if(!start){
start = new_node;
new_node->next = start;
}
else{
tmp = start;

Page | 63
while(tmp->next != start)
tmp = tmp->next;
tmp->next = new_node;
new_node->next = start;
}
}

int main()
{
int data;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(start);
printf("\nENTER data to add at middle: ");
scanf("%d",&data);
add_at_middle(data);
printf("\nList after adding element at middle are follows:-\n");
display(start);
return 0;
}

Page | 64
37. Program to Remove Duplicate Elements From a Circular Linked List

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

typedef struct NODE_cll{


int data;
struct NODE_cll *next;
}node;

node *start = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void remove_duplicate(){
int d;
if(!start || start->next == start)
return;
node *t;
tmp = start;
d = start->data;
while(tmp->next != start){
t = tmp;
while(t->next != start){
if(t->next->data == tmp->data)
t->next = t->next->next;
else
t = t->next;
}
tmp = tmp->next;
}
}

void display(node *t){


if(t){
do{
printf("%d -> ",t->data);
t = t->next;
}while(t != start);
}
printf("NULL\n");
}
void add_list(int data){
new_node = create_node(data);
if(!start){
start = new_node;
new_node->next = start;
}
else{
tmp = start;
while(tmp->next != start)
tmp = tmp->next;
tmp->next = new_node;
new_node->next = start;
}
}

int main()
{
int data;
while(1){

Page | 65
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(start);
remove_duplicate();
printf("\nData after removing duplicates are follows:-\n");
display(start);
return 0;
}

Page | 66
38. Program to Search an Element in a Circular Linked List

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

typedef struct NODE_cll{


int data;
struct NODE_cll *next;
}node;

node *start = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}

int search_key(int key){


tmp = start;
if(!tmp)
return 0;
do{
if(tmp->data == key){
return 1;
}
tmp = tmp->next;
}while(tmp != start);
return 0;
}

void display(node *t){


if(t){
do{
printf("%d -> ",t->data);
t = t->next;
}while(t != start);
}
printf("NULL\n");
}
void add_list(int data){
new_node = create_node(data);
if(!start){
start = new_node;
new_node->next = start;
}
else{
tmp = start;
while(tmp->next != start)
tmp = tmp->next;
tmp->next = new_node;
new_node->next = start;
}
}

int main()
{
int data,key;
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);

Page | 67
}
printf("\nENTERED Data are follows:-\n");
display(start);
printf("\nENTER key to search: ");
scanf("%d",&key);
if(search_key(key))
printf("\nKEY found");
else
printf("\nKEY not found");
return 0;
}

Page | 68
39. Program to Sort the Elements of the Circular Linked List

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

typedef struct NODE_cll{


int data;
struct NODE_cll *next;
}node;

node *start = NULL, *tmp=NULL, *new_node;

node* create_node(int data){


new_node = (node*)malloc(sizeof(node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}
void sort_list(){
int p;
node *t,*d;
tmp = start;
if(!start || start->next == start)
return;
while(tmp->next != start){
t = tmp->next;
d = tmp;
while(t != start){
if(t->data < tmp->data)
d = t;
t = t->next;
}
p = d->data;
d->data = tmp->data;
tmp->data = p;
tmp = tmp->next;
}
}
void display(node *t){
if(t){
do{
printf("%d -> ",t->data);
t = t->next;
}while(t != start);
}
printf("NULL\n");
}
void add_list(int data){
new_node = create_node(data);
if(!start){
start = new_node;
new_node->next = start;
}
else{
tmp = start;
while(tmp->next != start)
tmp = tmp->next;
tmp->next = new_node;
new_node->next = start;
}
}

int main()
{
int data,key;

Page | 69
while(1){
printf("Enter '0' to END! else enter data: ");
scanf("%d",&data);
if(!data)
break;
add_list(data);
}
printf("\nENTERED Data are follows:-\n");
display(start);
sort_list();
printf("\nData after sorting are follows:-\n");
display(start);
return 0;
}

Page | 70

You might also like