Learn-dsa..in 30 days!



























CC-2 : Self Organizing SingleLinkedList (i.e. LinkedList with Insertion sort in ascending order).

Description:

Given a SingleLinkedList with integer data, add new nodes one by one to the SingleLinkedList. As the nodes are added, list should also be sorted in integer ascending order

Test cases and expected outputs:

Input Parameters Expected outputs
Add node: 9 9
Add node :15 9->15
Add node: 3 3->9->15
Add node: 12 3->9->12->15
Add node: 44 3->9->12->15->44
Add node: 23 3->9->12->15->23->44

Pseudocode:

If the SingleLinkedList is initially empty, add the new node as the first node of the SingleLinkedList.
If next new node’s integer data to be added to SingleLinkedList is smaller than the first node’s integer data, then point the new node’s next link to the firstNode and update firstNode reference to point to new node.
Else, to insert new node in SingleLinkedList, start from first node of SingleLinkedList and traverse the SingleLinkedList nodes via “nextNode” links till you reach a node that’s integer value is greater than the integer value of new node to be inserted. Set this node to variable “currentNode” and its previous node to variable “previousNode”. Now the new node needs to be inserted between “previousNode” and “currentNode” to maintain ascending integer sort order of the SingleLinkedList.
If while traversing the SingleLinkedList we do not come across any integer greater than the integer data value of the new node, in this case, the new node can be added to end of the existing SingleLinkedList.

Code:

public void addIntToSingleLinkListWithInsertionSort(SingleLinkedList singleLinkedList, int add) throws Exception{
	if (singleLinkedList.getFirstNode()==null) { 
			singleLinkedList.addFirst(add);
			return;
	}
	if (singleLinkedList.getFirstNode().getNodeData()>=add) {
		singleLinkedList.addFirst(add);
		return;				
	}
	SingleLinkedListNode currNode=singleLinkedList.getFirstNode();
	SingleLinkedListNode prevNode=null;
	while (( currNode != null) && (currNode.getNodeData() < add))	{
		prevNode=currNode;
		currNode=currNode.getNextNode();				
	}
	SingleLinkedListNode node=new SingleLinkedListNode();
	node.setNodeData(add);
	if (currNode != null) {
		prevNode.setNextNode(node);
		node.setNextNode(currNode);
		return;
	}
	if (currNode == null){
		singleLinkedList.addLast(add);
		return;
	}	
}

Click here to download and run code and test cases !