Single Linked List
Single Linked List
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
struct Node
{
int info;
struct Node * link;
};
struct Node * START=NULL;
struct Node *Searching(int);
void showList();
void addToFirst();
void addToLast();
void deleteFirstNode();
void deleteLastNode();
int countNodes();
void sum();
void addBefore(struct Node *);
void addAfter(struct Node *);
void addNodeAtIndex(int);
void deleteGiven(struct Node *);
void deleteNodeAtIndex(int);
void deleteAllNodes();
void main()
{
int ch,res,key;
struct Node *LOC=NULL;
system("cls");
REP:
switch(ch)
{
case 1:
addToFirst();
break;
case 2:
addToLast();
break;
case 3:
printf("\n\t Enter The Search Key => ");
scanf("%d",&key);
LOC= Searching(key);
if(LOC!=NULL)
{
printf("\n\t Item Found ....");
}
else
{
printf("\n\t Item Not Found ....");
}
break;
case 4:
deleteLastNode();
break;
case 5:
deleteFirstNode();
break;
case 6:
res = countNodes();
printf("\n\tTotal Nodes In List Are : %d ",res);
break;
case 7:
showList();
break;
case 8:
sum();
break;
case 9:
printf("\n\t Enter The Information To Add After => ");
scanf("%d",&key);
LOC= Searching(key);
if(LOC!=NULL)
{
addAfter(LOC);
}
else
{
printf("\n\t Item Not Found ....");
}
break;
case 10:
printf("\n\t Enter The Information To Add After => ");
scanf("%d",&key);
LOC= Searching(key);
if(LOC!=NULL)
{
addBefore(LOC);
}
else
{
printf("\n\t Item Not Found ....");
}
break;
case 11:
printf("\n\t Enter The Index Number => ");
scanf("%d",&key);
res = countNodes();
if(key<res)
{
addNodeAtIndex(key);
}
else
{
printf("\n\t Index Number Is Out Of Range ....");
}
break;
case 12:
printf("\n\t Enter The Information To Delete => ");
scanf("%d",&key);
LOC= Searching(key);
if(LOC!=NULL)
{
deleteGiven(LOC);
}
else
{
printf("\n\t Item Not Found ....");
}
break;
case 13:
printf("\n\t Enter The Index Number => ");
scanf("%d",&key);
res = countNodes();
if(key<res)
{
deleteNodeAtIndex(key);
}
else
{
printf("\n\t Index Number Is Out Of Range ....");
}
break;
case 14:
deleteAllNodes();
break;
case 15:
printf("\n\t Thankk You .... ");
break;
default:
if(ch!=15)
{
system("cls");
goto REP;
}
void showList()
{
if(START==NULL)
{
printf("\n\tList Is EMPTY !!! ");
}
else
{
struct Node *PTR=NULL;
PTR=START;
int countNodes()
{
int count=0;
struct Node *PTR=NULL;
PTR=START;
while(PTR!=NULL)
{
count++;
PTR=PTR->link;
}
return(count);
}
void addToFirst()
{
struct Node *NewNode=NULL;
NewNode=(struct Node *)malloc(sizeof(struct Node));
NewNode->link = NULL;
if(START==NULL)
{
START=NewNode;
printf("\n\tFirst Node %d Is Added To List .... ",NewNode->info);
}
else
{
NewNode->link=START;
START=NewNode;
printf("\n\tNode %d Is Added At First In To List .... ",NewNode->info);
}
}
void addToLast()
{
struct Node *NewNode=NULL;
NewNode=(struct Node *)malloc(sizeof(struct Node));
NewNode->link = NULL;
if(START==NULL)
{
START=NewNode;
printf("\n\tFirst Node %d Is Added To List .... ",NewNode->info);
}
else
{
struct Node *PTR=NULL;
PTR=START;
while(PTR->link!=NULL)
{
PTR=PTR->link;
}
PTR->link=NewNode;
NewNode->link = NULL;
Prev = START;
while(Prev->link !=Location)
{
Prev=Prev->link;
}
NewNode->link=Location;
Prev->link = NewNode;
}
}
void addAfter(struct Node *Location)
{
struct Node *NewNode=NULL;
NewNode->link = NULL;
NewNode->link=Location->link;
Location->link = NewNode;
}
void addNodeAtIndex(int index)
{
struct Node *PTR=NULL;
int count=1;
PTR=START;
while(count<index)
{
PTR=PTR->link;
count++;
}
addBefore(PTR);
}
void deleteGiven(struct Node *Location)
{
if(Location==START)
{
START=START->link;
free(Location);
}
else
{
struct Node *PTR=NULL;
PTR=START;
while(PTR->link!=Location)
{
PTR=PTR->link;
}
PTR->link=Location->link;
free(Location);
}
}
void deleteAllNodes()
{
struct Node *PTR=NULL;
while(START!=NULL)
{
PTR=START;
START=START->link;
free(PTR);
}
}
void deleteNodeAtIndex(int index)
{
struct Node *Location=NULL;
int count=1;
Location=START;
while(count<index)
{
Location=Location->link;
count++;
}
deleteGiven(Location);
void deleteFirstNode()
{
if(START==NULL)
{
printf("\n\t List Is Empty ....");
printf("\n\t Not Eble To Delete ....");
}
else
{
struct Node *PTR=NULL;
PTR=START;
START=START->link;
free(PTR);
printf("\n\t First Node Deleted ....");
}
}
void deleteLastNode()
{
if(START==NULL)
{
printf("\n\t List Is Empty ...");
printf("\n\t Unable to delete ....");
}
else if(START->link==NULL)
{
free(START);
START=NULL;
}
else
{
struct Node *PRV=NULL;
struct Node *PTR=NULL;
PTR=START;
while(PTR->link!=NULL)
{
PRV=PTR;
PTR=PTR->link;
}
PRV->link=NULL;
free(PTR);
}
printf("\n\t Last Node Deleted Successfully ....");
}
void sum()
{
struct Node *PTR=NULL;
int total=0;
PTR=START;
while(PTR!=NULL)
{
total=total+PTR->info;
PTR=PTR->link;
}
printf("\n\t The Sum Of All The Nodes Is => %d",total);
}
PTR=START;
while(PTR!=NULL)
{
if(item==PTR->info)
{
LOC=PTR;
break;
}
PTR=PTR->link;
}
return(LOC);
}