#include<stdio.h>
#include<stdlib.h>
struct node //Structure node of the linked list...
{
int data;
struct node* next;
};
int flag; // Temporary variable to handle the error condition in deleteatfront,deleteatend functions...
struct node* insertatfront(struct node* thead,int x);
struct node* insertatend(struct node* thead,int x);
struct node* insertatposition(struct node* thead,int pos,int x);
struct node* deleteatposition(struct node* thead,int pos,int *pans);
struct node* deleteatfront(struct node* thead,int *pans);
struct node* deleteatend(struct node* thead,int *pans);
void printlist(struct node* thead);
void main()
{
struct node* head=NULL;
int breakcondition=1; // Temporary variable to exit the menu driven program...
printf("Empty Linked list is created..");
int ch,x,p;
printf("\nChoice : \n1) Insert at Front.\n2) Insert at End.\n3) Delete at Front\n4) Delete at End.\n5) Print the list.\n6) Insert at a position.\n7) Delete at a position.\n8) Length of Linked list.\n9) Stop..");
while(1)
{
printf("\nEnter your choice..");
scanf("%d",&ch);
switch(ch)
{
case 1:{
printf("\nEnter any element you want to insert...");
scanf("%d",&x);
head=insertatfront(head,x);
printlist(head);
break;
}
case 2:{
printf("\nEnter any element you want to insert...");
scanf("%d",&x);
head=insertatend(head,x);
printlist(head);
break;
}
case 3:{
int ans;
flag=0;
head=deleteatfront(head,&ans);
if(flag==0)
printf("\nThe element which is deleted is ..%d",ans);
printlist(head);
break;
}
case 4:{
int ans;
flag=0;
head=deleteatend(head,&ans);
if(flag==0)
printf("\nThe element which is deleted is ..%d",ans);
printlist(head);
break;
}
case 5:{
printlist(head);
break;
}
case 6:{
printf("\nEnter any element you want to insert and its position..");
scanf("%d%d",&x,&p);
head=insertatposition(head,p,x);
printlist(head);
break;
}
case 7:{
int ans;
flag=0;
printf("\nEnter the position..");
scanf("%d",&p);
head=deleteatposition(head,p,&ans);
if(flag==0)
printf("\nThe element which is deleted is ..%d",ans);
printlist(head);
break;
}
case 8:{
int len=length(head);
if(len==0){
printf("\nThe linked list is empty...");
}
else {
printf("\nThe length of the linked list is..%d",len);
}
break;
}
case 9:{
breakcondition=0;
break;
}
default : printf("\nPlease Enter a valid choice..");
}
if(breakcondition==0)
break;
}
}
struct node* insertatfront(struct node* thead,int x)
{
struct node* newnode = (struct node*)malloc(sizeof(struct node));
newnode->data=x;
newnode->next=thead;
return newnode;
}
struct node* insertatend(struct node* thead,int x)
{
struct node* newnode = (struct node*)malloc(sizeof(struct node));
newnode->data=x;
if(thead==NULL) // Corner Case to handle if the list is empty...
{
newnode->next=NULL;
return newnode;
}
struct node* trav=thead;
while(trav->next!=NULL) // Traversing to point to the last node...
trav=trav->next;
trav->next=newnode;
newnode->next=NULL;
return thead;
}
struct node* deleteatfront(struct node* thead,int *pans)
{
if(thead==NULL) // Corner Case to handle if the list is empty...
{
flag=1;
return thead;
}
struct node* trav=thead;
*pans=trav->data;
trav=trav->next;
free(thead);
return trav;
}
struct node* deleteatend(struct node* thead,int *pans)
{
if(thead==NULL) // Corner Case to handle if the list is empty...
{
flag=1;
return thead;
}
if(thead->next==NULL) // Corner Case to handle if the list contains only one element...
{
struct node* temp=thead;
thead=NULL;
free(temp);
return thead;
}
struct node* trav=thead;
while(trav->next->next!=NULL) // Traversing to point to the last before node...
trav=trav->next;
struct node* temp=trav->next;
*pans=temp->data;
free(temp);
trav->next=NULL;
return thead;
}
void printlist(struct node* thead)
{
if(thead==NULL) // Corner Case to handle if the list is empty...
{
printf("\nThe list is Empty..");
return;
}
printf("\nThe list is..");
while(thead!=NULL) // Traversing the entire list...
{
printf("%d ",thead->data);
thead=thead->next;
}
}
struct node* insertatposition(struct node* thead,int pos,int x)
{
int len=length(thead);
if(pos<=0||pos>len+1){
printf("\nThe position is invalid..");
return thead;
}
struct node* newnode = (struct node*) malloc(sizeof(struct node));
newnode->data=x;
struct node* trav;
int i;
trav=thead;
if(pos==1){ // Corner Case to handle if the position is 1...
newnode->next=thead;
thead=newnode;
return thead;
}
for(i=1;i<=pos-2;i++){ // Traversing the trav pointer pos-2 times from the head...
trav=trav->next;
}
newnode->next=trav->next;
trav->next=newnode;
return thead;
}
struct node* deleteatposition(struct node* thead,int pos,int *pans)
{
int len=length(thead);
if(pos<=0||pos>len){ // Corner Case to handle if the position is invalid...
printf("\nThe position is invalid..");
flag=1;
return thead;
}
struct node* front,* current;
front=current=thead;
int i;
if(thead==NULL){ // Corner Case to handle if the list is empty...
printf("\nThe List is already Empty..");
flag=1;
return thead;
}
if(pos==1){ // Corner Case to handle if the position is 1...
*pans=current->data;
current=current->next;
free(front);
return current;
}
for(i=1;i<=pos-1;i++){ // Traversing the current pointer pos-1 times from the head...
front=current;
current=current->next;
}
*pans=current->data;
front->next=current->next;
free(current);
return thead;
}
int length(struct node* thead)
{
int c=0;
while(thead!=NULL){ //Traversing the entire list and incrementing c...
c++;
thead=thead->next;
}
return c;
}
#include<stdlib.h>
struct node //Structure node of the linked list...
{
int data;
struct node* next;
};
int flag; // Temporary variable to handle the error condition in deleteatfront,deleteatend functions...
struct node* insertatfront(struct node* thead,int x);
struct node* insertatend(struct node* thead,int x);
struct node* insertatposition(struct node* thead,int pos,int x);
struct node* deleteatposition(struct node* thead,int pos,int *pans);
struct node* deleteatfront(struct node* thead,int *pans);
struct node* deleteatend(struct node* thead,int *pans);
void printlist(struct node* thead);
void main()
{
struct node* head=NULL;
int breakcondition=1; // Temporary variable to exit the menu driven program...
printf("Empty Linked list is created..");
int ch,x,p;
printf("\nChoice : \n1) Insert at Front.\n2) Insert at End.\n3) Delete at Front\n4) Delete at End.\n5) Print the list.\n6) Insert at a position.\n7) Delete at a position.\n8) Length of Linked list.\n9) Stop..");
while(1)
{
printf("\nEnter your choice..");
scanf("%d",&ch);
switch(ch)
{
case 1:{
printf("\nEnter any element you want to insert...");
scanf("%d",&x);
head=insertatfront(head,x);
printlist(head);
break;
}
case 2:{
printf("\nEnter any element you want to insert...");
scanf("%d",&x);
head=insertatend(head,x);
printlist(head);
break;
}
case 3:{
int ans;
flag=0;
head=deleteatfront(head,&ans);
if(flag==0)
printf("\nThe element which is deleted is ..%d",ans);
printlist(head);
break;
}
case 4:{
int ans;
flag=0;
head=deleteatend(head,&ans);
if(flag==0)
printf("\nThe element which is deleted is ..%d",ans);
printlist(head);
break;
}
case 5:{
printlist(head);
break;
}
case 6:{
printf("\nEnter any element you want to insert and its position..");
scanf("%d%d",&x,&p);
head=insertatposition(head,p,x);
printlist(head);
break;
}
case 7:{
int ans;
flag=0;
printf("\nEnter the position..");
scanf("%d",&p);
head=deleteatposition(head,p,&ans);
if(flag==0)
printf("\nThe element which is deleted is ..%d",ans);
printlist(head);
break;
}
case 8:{
int len=length(head);
if(len==0){
printf("\nThe linked list is empty...");
}
else {
printf("\nThe length of the linked list is..%d",len);
}
break;
}
case 9:{
breakcondition=0;
break;
}
default : printf("\nPlease Enter a valid choice..");
}
if(breakcondition==0)
break;
}
}
struct node* insertatfront(struct node* thead,int x)
{
struct node* newnode = (struct node*)malloc(sizeof(struct node));
newnode->data=x;
newnode->next=thead;
return newnode;
}
struct node* insertatend(struct node* thead,int x)
{
struct node* newnode = (struct node*)malloc(sizeof(struct node));
newnode->data=x;
if(thead==NULL) // Corner Case to handle if the list is empty...
{
newnode->next=NULL;
return newnode;
}
struct node* trav=thead;
while(trav->next!=NULL) // Traversing to point to the last node...
trav=trav->next;
trav->next=newnode;
newnode->next=NULL;
return thead;
}
struct node* deleteatfront(struct node* thead,int *pans)
{
if(thead==NULL) // Corner Case to handle if the list is empty...
{
flag=1;
return thead;
}
struct node* trav=thead;
*pans=trav->data;
trav=trav->next;
free(thead);
return trav;
}
struct node* deleteatend(struct node* thead,int *pans)
{
if(thead==NULL) // Corner Case to handle if the list is empty...
{
flag=1;
return thead;
}
if(thead->next==NULL) // Corner Case to handle if the list contains only one element...
{
struct node* temp=thead;
thead=NULL;
free(temp);
return thead;
}
struct node* trav=thead;
while(trav->next->next!=NULL) // Traversing to point to the last before node...
trav=trav->next;
struct node* temp=trav->next;
*pans=temp->data;
free(temp);
trav->next=NULL;
return thead;
}
void printlist(struct node* thead)
{
if(thead==NULL) // Corner Case to handle if the list is empty...
{
printf("\nThe list is Empty..");
return;
}
printf("\nThe list is..");
while(thead!=NULL) // Traversing the entire list...
{
printf("%d ",thead->data);
thead=thead->next;
}
}
struct node* insertatposition(struct node* thead,int pos,int x)
{
int len=length(thead);
if(pos<=0||pos>len+1){
printf("\nThe position is invalid..");
return thead;
}
struct node* newnode = (struct node*) malloc(sizeof(struct node));
newnode->data=x;
struct node* trav;
int i;
trav=thead;
if(pos==1){ // Corner Case to handle if the position is 1...
newnode->next=thead;
thead=newnode;
return thead;
}
for(i=1;i<=pos-2;i++){ // Traversing the trav pointer pos-2 times from the head...
trav=trav->next;
}
newnode->next=trav->next;
trav->next=newnode;
return thead;
}
struct node* deleteatposition(struct node* thead,int pos,int *pans)
{
int len=length(thead);
if(pos<=0||pos>len){ // Corner Case to handle if the position is invalid...
printf("\nThe position is invalid..");
flag=1;
return thead;
}
struct node* front,* current;
front=current=thead;
int i;
if(thead==NULL){ // Corner Case to handle if the list is empty...
printf("\nThe List is already Empty..");
flag=1;
return thead;
}
if(pos==1){ // Corner Case to handle if the position is 1...
*pans=current->data;
current=current->next;
free(front);
return current;
}
for(i=1;i<=pos-1;i++){ // Traversing the current pointer pos-1 times from the head...
front=current;
current=current->next;
}
*pans=current->data;
front->next=current->next;
free(current);
return thead;
}
int length(struct node* thead)
{
int c=0;
while(thead!=NULL){ //Traversing the entire list and incrementing c...
c++;
thead=thead->next;
}
return c;
}
No comments:
Post a Comment