Before making the required pointer adjustments, skip the required number of nodes to reach the mentioned node, to insert a node after that specified node, in the list. For this, we will use the below steps:
- Use the below statement to allocate the memory for the new node.
ptr = (struct node *)malloc(sizeof(struct node));
- Use the below statements, to skip the required number of nodes to reach the specified node. Here, we are traversing the list by using the pointer temp.
temp=head; for(i=0;i<loc;i++) { temp = temp->next; // the temp will be null if the list does not last long up to mentioned location if(temp == NULL) { return; } }
- At the end of the for a loop, the temp would point to the specified node. We will insert the new node after this node. But, before that, we need to make a few pointer adjustments. Use the below statement, to make the next pointer of ptr point to the next node of temp.
ptr → next = temp → next;
- Use the below statement, to make the prev of the new node ptr point to temp.
ptr → prev = temp;
- Use the below statement, to make the next pointer of temp point to the new node ptr.
temp → next = ptr;
- Use the below statement, to make the previous pointer of the next node of temp point to the new node.
temp → next → prev = ptr;
Algorithm:
- Step 1:IF PTR = NULL
Write OVERFLOW
Go to Step 15
[END OF IF] - Step 2: SET NEW_NODE = PTR
- Step 3: SET PTR = PTR -> NEXT
- Step 4: SET NEW_NODE -> DATA = VAL
- Step 5: SET TEMP = START
- Step 6: SET I = 0
- Step 7: REPEAT 8 to 10 until I
- Step 8: SET TEMP = TEMP -> NEXT
- STEP 9: IF TEMP = NULL
- STEP 10:WRITE “LESS THAN DESIRED NO. OF ELEMENTS”
GOTO STEP 15
[END OF IF]
[END OF LOOP] - Step 11: SET NEW_NODE -> NEXT = TEMP -> NEXT
- Step 12: SET NEW_NODE -> PREV = TEMP
- Step 13 : SET TEMP -> NEXT = NEW_NODE
- Step 14: SET TEMP -> NEXT -> PREV = NEW_NODE
- Step 15: EXIT
Example in C:
#include<stdio.h> #include<stdlib.h> void insertAtSpecified(int); void create(int); struct node { int data; struct node *next; struct node *prev; }; struct node *head; void main () { int choice,item,loc; do { printf("\nEnter the element to insert:\n"); scanf("%d",&item); if(head == NULL) { create(item); } else { insertAtSpecified(item); } printf("\nPress 1 to insert more elements.\n"); scanf("%d",&choice); }while(choice == 1); } void create(int item) { struct node *ptr = (struct node *)malloc(sizeof(struct node)); if(ptr == NULL) { printf("\nOVERFLOW"); } else { if(head==NULL) { ptr->next = NULL; ptr->prev=NULL; ptr->data=item; head=ptr; } else { ptr->data=item;printf("\nPress 1 to insert more elements.\n"); ptr->prev=NULL; ptr->next = head; head->prev=ptr; head=ptr; } printf("\nNode Inserted Successfully!!\n"); } } void insertAtSpecified(int item) { struct node *ptr = (struct node *)malloc(sizeof(struct node)); struct node *temp; int i, loc; if(ptr == NULL) { printf("\n OVERFLOW"); } else { printf("\nEnter the location:\n"); scanf("%d",&loc); temp=head; for(i=0;i<loc;i++) { temp = temp->next; if(temp == NULL) { printf("\nNode can't be inserted.\n"); return; } } ptr->data = item; ptr->next = temp->next; ptr -> prev = temp; temp->next = ptr; temp->next->prev=ptr; printf("Node Inserted Successfully!!\n"); } } |
Output:
Enter the element to insert: 2 Node Inserted Successfully!! Press 1 to insert more elements. 1 Enter the element to insert: 4 Enter the location: 0 Node Inserted Successfully!! Press 1 to insert more elements. 1 Enter the element to insert: 6 Enter the location: 1 Node Inserted Successfully!! Press 1 to insert more elements. 1 Enter the element to insert: 8 Enter the location: 4 Node can't be inserted. Press 1 to insert more elements. 5 |