Insertion of a new node at position N in singly link list requires traversing the list for N-1 th node so that links are updated to accommodate the new node in the list. The new node's next is set to point to Nth node of the list and then N-1 th node's next pointer is updated so that it reference to new node. The step by step algorithm to insert node at Nth position is as below:
Algorithm to insert node at specific position N in singly link list:
This algorithm will insert the new node PTR at the position N in the link list. The steps are as follows:- Create new node PTR
- Set the INFO field of PTR
- If N is less than 1
- Node can't be inserted
- Else If node is to be inserted at first i.e. [N=1]
- Make new node PTR points to first node i.e. [PTR->NEXT = START]
- Make START point to new node PTR i.e. [START = PTR]
- Else
- Traverse the list to get the (N-1)th node of list into TEMP
- Make PTR's next pointer point to Nth node in the list i.e. [PTR -> NEXT = TEMP->NEXT]
- Make (N-1)th node's next point to new node PTR i.e. [TEMP->NEXT = PTR]
- End If;
Function to insert node at specific position N in singly link list:
void insertAtPosition(NODE **start, int info, int POS /*position*/){
NODE *ptr = (NODE*) malloc(sizeof(NODE));
NODE *temp;
ptr->info = info;
int k;
if(POS < 1) {
printf("\nPosition can't be less than one..");
free(ptr);
}
else if(POS == 1){
ptr->next = *start;
*start = ptr;
}
else if(*start != NULL){ /* list has no node and N is greater than 1 */
for(k = 2, temp = *start; k < POS; k++){
temp = temp->next;
if(temp == NULL){
printf("\nInvalid position\n");
return;
}
}
ptr->next = temp->next;
temp->next = ptr;
}
else{
printf("\nList has no node and postition is greater than 1");
free(ptr);
}
}
Program to insert at specific position N in the singly link list:
#include <stdio.h>
#include <malloc.h>
struct node{
int info;
struct node *next;
};
typedef struct node NODE;
void insertAtPosition(NODE **, int, int);
void traverse(NODE **);
int main(){
NODE *start = NULL;
insertAtPosition(&start, 1, 1);
insertAtPosition(&start, 2, 2);
insertAtPosition(&start, 3, 2);
traverse(&start);
return 0;
}
void insertAtPosition(NODE **start, int info, int POS /*position*/){
NODE *ptr = (NODE*) malloc(sizeof(NODE));
NODE *temp;
ptr->info = info;
int k;
if(POS < 1) {
printf("\nPosition can't be less than one..");
free(ptr);
}
else if(POS == 1){
ptr->next = *start;
*start = ptr;
}
else if(*start != NULL){ /* list has no node and N is greater than 1 */
for(k = 2, temp = *start; k < POS; k++){
temp = temp->next;
if(temp == NULL){
printf("\nInvalid position\n");
return;
}
}
ptr->next = temp->next;
temp->next = ptr;
}
else{
printf("\nList has no node and postition is greater than 1");
free(ptr);
}
}
void traverse(NODE **start){
NODE *temp;
temp = *start;
while(temp != NULL){
printf("%d ", temp->info);
temp = temp->next;
}
}
Output: 1 3 2
Comments
Post a Comment