Skip to content

Instantly share code, notes, and snippets.

@mukeshpilaniya
Last active November 23, 2017 15:16
Show Gist options
  • Save mukeshpilaniya/bca26c4a439db858715ae36bd05ea981 to your computer and use it in GitHub Desktop.
Save mukeshpilaniya/bca26c4a439db858715ae36bd05ea981 to your computer and use it in GitHub Desktop.
Linked List Operation in C
#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