# Insert a node in a Linked List

Discussion in 'C' started by shabbir, Aug 27, 2006.

Joined:
Jul 12, 2004
Messages:
15,296
366
Trophy Points:
83
Insert a node before a particular node in a linked ist
Code:
```node* ins_bef(node *current)
{
int rno;                         /* Roll number for inserting a node*/
node *newnode,*temp;
newnode=(node*)malloc(sizeof(node));
printf("\nEnter the roll number before which you want to insert a node\n");
scanf("%d",&rno);
init(newnode);
if(current->roll_no==rno)
{
newnode->next=current;
current=newnode;
return(current);
}
temp=current;
while(temp->next!=NULL)
{
if(temp->next->roll_no==rno)
{
newnode->next=temp->next;
temp->next=newnode;
return(current);
}
temp=temp->next;
}
/*
If the function does not return from any return statement.
There is no match to insert before the input  roll number.
*/
return(current);
}```
You should be calling the above function as follows
Code:
```head=ins_bef(head);// Head is the first node of the linked list
```
Insert a node after a particular node in a linked list
Code:
```void ins_aft(node *current)
{
int rno;                         /* Roll number for inserting a node*/
int flag=0;
node *newnode;
newnode=(node*)malloc(sizeof(node));
printf("\nEnter the roll number after which you want to insert a node\n");
scanf("%d",&rno);
init(newnode);
while(current->next!=NULL)
{
/***  Insertion checking for all nodes except last  ***/
if(current->roll_no==rno)
{
newnode->next=current->next;
current->next=newnode;
flag=1;
}
current=current->next;
}
if(flag==0 && current->next==NULL && current->roll_no==rno)
{
/***  Insertion checking for last nodes  ***/
newnode->next=current->next;
current->next=newnode;
flag=1;
}
if(flag==0 && current->next==NULL)
printf("\nNo match found\n");
}
```
You should be calling the above function as follows
Code:
```ins_aft(head); // Head is the first node of the linked list
```
And last but not the least you should also know how the structure of the linked list is defined.
Code:
```struct list{
int roll_no;          /* Storing roll number of a node */
char name[N];         /* Storing name of node */
float marks;          /* Storing marks of a node */
struct list *next;    /* Storing next address */
};
/*****  Redefining struct list as node  *****/
typedef struct list node;
```
The difference in the return type of `ins_bef` and `ins_aft` is because inserting before can be done for the first node as well and so we may need to update the head but thats not the case with inserting after

2. ### rashida.parNew Member

Joined:
Feb 14, 2008
Messages:
21
1
Trophy Points:
0
ok understood

Joined:
Apr 24, 2008
Messages:
8