Create and insert node in a linear link list. When a list has no any node, i.e. the list is empty or list is NULL then need to create a node. Otherwise we have insert node in the existing list. We can insert a node in different position of the list depend on position or value. The type of inserting node are
Now we create the basic environment of the link list.
#include<stdio.h>
#include<conio.h>
struct slinearlinklist
{
int i;
struct slinearlinklist *next;
};
typedef struct slinearlinklist node;
//prototype declaration
node *create(node *);
node *insert_first(node *);
void insert_end(node *);
void insert_pos1(node *,int);
node *insert_pos2(node *);
node *insert_after(node *);
node *insert_before(node *);
node *head=NULL;
int main()
{
int c,i,pos;
while(1)
{
printf("\n1. Create a list\n");
printf("2. Insert into begining\n");
printf("3. Insert into end position\n");
printf("4. Insert into position 1\n");
printf("5. Insert into position [Any where]\n");
printf("6. Insert after a said value\n");
printf("7. Insert before a said value\n");
printf("8. Exit\n");
printf("Enter Your choice : ");
scanf("%d",&c);
switch(c)
{
case 1:
head=create(head);
break;
case 2:
head=insert_first(head); // insert at beginning
break;
case 3:
insert_end(head); // insert at end
break;
case 4:
printf("Enter position : ");//Insert at a said position except first and last
scanf("%d",&pos);
insert_pos1(head,pos);
break;
case 5:
printf("Enter position : ");//Insert at anywhare
scanf("%d",&pos);
insert_pos2(head,pos);
break;
case 6:
head=insert_after(head); // insert after a value
break;
case 7:
head=insert_before(head); // insert before a value
break;
case 8:
exit(0);
}
}
}
Function for create the first node of the list. Here we goning to create the first node. i.e. first node or head will be changed after creation of the node. That is why the return type of the function is node.
node *create(node *l)
{
if(l==NULL)
{
l=(node *)malloc(sizeof(node));//allocate a dynamic memory of node type.
printf("Enter a data : ");
scanf("%d",&l->i);
l->next=NULL;
}
return l;
}
Insert a node at the beginning of the exsiting list. If the list is not found the this function call create() function autometically.
node *insert_first(node *l)
{
node *temp;
if(l!=NULL)
{
temp=(node *)malloc(sizeof(node));
printf("Enter a data : ");
scanf("%d",&temp->i);
temp->next=l;
return temp;
}
else
{
return create(l);
}
}
Insert a node at the End of the exsiting list. If the list is not found the this function call create() function autometically.
void insert_end(node *l)
{
node *temp;
if(l!=NULL)
{
temp=(node *)malloc(sizeof(node));
printf("Enter a data : ");
scanf("%d",&temp->i);
while(l->next!=NULL)
{
l=l->next;
}
temp->next=NULL;
l->next=temp;
}
else
{
return create(l);
}
}
Insert a new node in a said position except first and last. If the list is not found the this function call create() function autometically.
void insert_pos1(node *l,int pos){
node *temp;
if(l!=NULL)
{
temp=(node *)malloc(sizeof(node));
printf("Enter a data : ");
scanf("%d",&temp->i);
for(i=1;i<=pos-2;i++)
{
l=l->next;
}
temp->next=l->next;
l->next=temp;
}
else
{
return create(l);
}
}
Insert a new node in any position of an existing list. If the list is not found the this function call create() function autometically.
node *insert_pos2(node *l)
{
node *temp,*temp2,*h;
int pos,i,c=0;
h=l;
temp2=l;
printf("Enter position : ");
scanf("%d",&pos);
while(temp2!=NULL)
{
c++;
temp2=temp2->next;
}
if(c>=pos)
{
insert_pos1(l,pos);//normal
return h;
}
else
{
if(l!=NULL)
{
insert_end(l);//last insert
return h;
}
else
{
return create(l);//create
}
}
}
Insert a new node after a given value. if the value not found in existing list, print an appropiate message. If the list is not found the this function call create() function autometically.
node *insert_after(node *l)
{
node *temp,*h;
int val;
int fl=0;
h=l;
if(l!=NULL){
printf("Enter a value(after we insert a new node)");
scanf("%d",&val);
while(l->next!=NULL)
{
if(l->i==val)
{
fl=1;
break;
}
l=l->next;
}
if(fl)//found
{
if(l->next==NULL)//last node
{
insert_end(l);//last insert
}
else
{
temp=(node *)malloc(sizeof(node));
temp->next=l->next;
l->next=temp;
}
}
else//not found
{
printf("Supplied data not found");
}
return h;
}
else
{
return create(l);
}
}
Insert a new node before a given value. if the value not found in existing list, print an appropiate message. If the list is not found the this function call create() function autometically.
node *insert_before(node *l)
{
node *temp,*h;
int val;
int fl=0;
h=l;
if(l!=NULL){
printf("Enter a value(before we insert a new node)");
scanf("%d",&val);
while(l->next!=NULL)
{
if(l->next->i==val)
{
fl=1;
break;
}
l=l->next;
}
if(fl)//found
{
if(l==h)//first node
{
return insert_first(l);//insert at begining
}
else
{
temp=(node *)malloc(sizeof(node));
temp->next=l->next;
l->next=temp;
}
}
else//not found
{
printf("Supplied data not found");
}
return h;
}
else
{
return create(l);
}
}