Last active
November 23, 2017 15:16
-
-
Save mukeshpilaniya/bca26c4a439db858715ae36bd05ea981 to your computer and use it in GitHub Desktop.
Linked List Operation in C
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include<stdio.h> | |
#include<stdlib.h> | |
struct node{ | |
int data; | |
struct node *next; | |
}; | |
struct node *head=NULL; | |
int p,q,r,nodenumber,nodedata; | |
void main(){ | |
int operationtype,i; | |
char nodeoperation; | |
printf("Enter Number of Nodes you want to create:"); | |
scanf("%d",&nodenumber); | |
for(i=1;i<=nodenumber;i++){ | |
printf("Enter %d Node data:",i); | |
scanf("%d",&nodedata); | |
createnode(nodedata); | |
} | |
printf("want to perfrom operation on node(y\\n)):"); | |
scanf("%s",&nodeoperation); | |
if(nodeoperation=='y'||nodeoperation=='Y' ||nodeoperation=='yes'|| nodeoperation=='YES'){ | |
printf("1.Insert node at begning\n2.Insert node at position p(1>=p>=%d)\n3.Insert node at end\n4.Delete first node\n5.Delete position p (1>=p>=%d) node\n6.Delete end node\n7.swap two nodes\n8.reverse list\n",nodenumber,nodenumber); | |
printf("Choose position:"); | |
scanf("%d",&operationtype); | |
switch(operationtype){ | |
case 1: | |
printf("Enter data you want to insert:"); | |
scanf("%d",&nodedata); | |
insert_at_begning(nodedata); | |
break; | |
case 2: | |
printf("Enter position of node:"); | |
scanf("%d",&p); | |
if(p==0){ | |
printf("Please enter position greater then 0\n"); | |
break; | |
}else if(p>nodenumber){ | |
printf("Please enter correct position\n"); | |
break; | |
} | |
printf("Enter data you want to insert:"); | |
scanf("%d",&nodedata); | |
insert_at_position_p(nodedata); | |
break; | |
case 3: | |
printf("Enter data you want to insert:"); | |
scanf("%d",&nodedata); | |
insert_at_end(nodedata); | |
break; | |
case 4: | |
delete_first_node(); | |
break; | |
case 5: | |
printf("Enter position of node:"); | |
scanf("%d",&p); | |
if(p==0){ | |
printf("Please enter position greater then 0\n"); | |
break; | |
}else if(p>nodenumber){ | |
printf("Please enter correct position\n"); | |
break; | |
} | |
delete_p_node(p); | |
case 6: | |
delete_end_node(); | |
break; | |
case 7: | |
printf("Enter nodes you want to swap\n"); | |
scanf("%d %d",&p,&q); | |
if(p==0||q==0){ | |
printf("Please enter position greater then 0\n"); | |
break; | |
}else if(p>nodenumber||q>nodenumber){ | |
printf("Please enter correct position\n"); | |
break; | |
} | |
if(p>q){ | |
r=p; | |
p=q; | |
q=r; | |
} | |
swap_node(p,q); | |
break; | |
case 8: | |
reverse_list(); | |
break; | |
default: | |
printf("Please enter correct position\n"); | |
} | |
} | |
display(); | |
} | |
void createnode(int x){ | |
struct node *newnode, *temp; | |
newnode = (struct node*) malloc(sizeof(struct node)); | |
newnode->data=x; | |
newnode->next=NULL; | |
temp=head; | |
if(temp==NULL){ | |
head=newnode; | |
}else{ | |
while(temp->next!=NULL){ | |
temp=temp->next; | |
} | |
temp->next=newnode; | |
} | |
} | |
void display(){ | |
struct node *temp; | |
temp=head; | |
printf("created node data are\n"); | |
while(temp->next!=NULL){ | |
printf("%d\n",temp->data); | |
temp=temp->next; | |
} | |
printf("%d\n",temp->data); | |
} | |
void insert_at_begning(int x){ | |
struct node *newnode; | |
newnode=(struct node*) malloc(sizeof(struct node)); | |
newnode->data=x; | |
newnode->next=head; | |
head=newnode; | |
} | |
void insert_at_position_p(int x){ | |
if(p>1){ | |
struct node *newnode, *temp; | |
int i; | |
newnode=(struct node*)malloc(sizeof(struct node)); | |
newnode->data=x; | |
temp=head; | |
for(i=1;i<p-1;i++){ | |
temp=temp->next; | |
} | |
newnode->next=temp->next; | |
temp->next=newnode; | |
} else if(p==1){ | |
insert_at_begning(nodedata); | |
} | |
} | |
void insert_at_end(int x){ | |
struct node *newnode, *temp; | |
newnode=(struct node*)malloc(sizeof(struct node)); | |
newnode->data=x; | |
newnode->next=NULL; | |
temp=head; | |
while(temp->next!=NULL){ | |
temp=temp->next; | |
} | |
temp->next=newnode; | |
} | |
void delete_first_node(){ | |
struct node *temp; | |
temp=head; | |
head=head->next; | |
free(temp); | |
} | |
void delete_p_node(int x){ | |
if(p!=1){ | |
struct node *temp,*q; | |
int i; | |
temp=head; | |
for(i=1;i<p-1;i++){ | |
temp=temp->next; | |
} | |
q=temp->next; | |
temp->next=temp->next->next; | |
free(q); | |
}else if(p==1){ | |
delete_first_node(); | |
} | |
} | |
void delete_end_node(){ | |
if(head->next!=NULL){ | |
struct node *temp,*q; | |
temp=head; | |
while(temp->next->next!=NULL){ | |
temp=temp->next; | |
} | |
q=temp->next; | |
temp->next=temp->next->next; | |
free(q); | |
}else{ | |
free(head); | |
} | |
} | |
void swap_node(int x , int y){ | |
struct node *temp1,*temp2; | |
int s,i; | |
temp1=temp2=head; | |
for(i=1;i<p;i++){ | |
temp1=temp1->next; | |
} | |
for(i=1;i<q;i++){ | |
temp2=temp2->next; | |
} | |
s=temp1->data; | |
temp1->data=temp2->data; | |
temp2->data=s; | |
} | |
void reverse_list(){ | |
struct node *nextnode=NULL,*prev=NULL; | |
while(head->next){ | |
nextnode=head->next; | |
head->next=prev; | |
prev=head; | |
head=nextnode; | |
} | |
head->next=prev; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment