Insertion in an ordered LINKED LIST
Here in this case to find the location LOC, the list is traversed, by comparing the Information to be stored with the information of the nodes. First compare the NEW node information with that of the information of the first node. If it is less then the first node information, insert the new node as the first node by copying the address of new node NEW in ROOT before that copy ROOT in LINK of NEW. So initially set LOC with LINK of ROOT and another pointer variable TEMP with ROOT. Traverse till LOC < >NULL or till the Information of the NEW node less than the Information of any node by updating TEMP with LOC and LOC with LINK of LOC. Once the location LOC is found, copy LOC, the address of the node before which insertion is to be done in LINK of NEW and copy address of the previous node given by LINK of TEMP with NEW.
For example consider the below Linked List in which the node are stored in ascending order.
Here in this case to find the location LOC, the list is traversed, by comparing the Information to be stored with the information of the nodes. First compare the NEW node information with that of the information of the first node. If it is less then the first node information, insert the new node as the first node by copying the address of new node NEW in ROOT before that copy ROOT in LINK of NEW. So initially set LOC with LINK of ROOT and another pointer variable TEMP with ROOT. Traverse till LOC < >NULL or till the Information of the NEW node less than the Information of any node by updating TEMP with LOC and LOC with LINK of LOC. Once the location LOC is found, copy LOC, the address of the node before which insertion is to be done in LINK of NEW and copy address of the previous node given by LINK of TEMP with NEW.
For example consider the below Linked List in which the node are stored in ascending order.
If a NEW node is to be inserted with Information 15, first create the NEW node and store the Information part of it with 15 and initialize LINK with NULL. Compare 15 with information of first node i.e. 10. 15 is not less than 10. So set LOC with LINK of ROOT and TEMP with ROOT. Compare INFO of NEW node with INFO of node pointer by LOC. So 15 is not greater than 20, come out LOC is the location at which the NEW node is to be inserted. Copy LINK of NEW with LOC and copy LINK of TEMP with NEW. Insertion is over.
Algorithm to Insert node in an ordered linked list when the location LOC is not given:
NSERTOLL(ROOT)
If AVAIL=NULL Then:
write: ‘Memory Allocation Error’
Exit.
[End of If]
NEW<--AVAIL
AVAIL<--AVAIL-->LINK
NEW-->LINK<--NULL
NEW-->INFO<--Information
[Information is the data to be stored in node]
If NEW-->INFO < ROOT-->INFO Then
NEW-->LINK<--ROOT
ROOT<--NEW
Else:
TEMP<--ROOT
LOC<--ROOT-->LINK
Repeat While LOC< >NULL AND NEW-->INFO > LOC-->INFO
TEMP<--LOC, LOC<--LOC-->LINK
[End of While]
NEW-->LINK<--LOC
TEMP-->LINK<--NEW
[End of If]
Exit.