Learn-dsa..in 30 days!



























CC-5 : Merge 2 sorted SingleLinkedLists into a single sorted SingleLinkedList.

Description:

Given two sorted SingleLinkedLists, write and test code merges the same in to single sorted SingleLinkedList.

Test cases and expected outputs:

Input Parameters Expected outputs
22 -> 44 -> 77 -> 99
20 -> 40 -> 70 -> 90
20 -> 22 -> 40 -> 44 -> 70 -> 77 -> 90 -> 99
1 -> 2 -> 3 -> 4
5 -> 5 -> 6 -> 7
1 -> 2 -> 3 -> 4 -> 5 -> 5 -> 6 -> 7
10 -> 21 -> 37 -> 44
Empty
10 -> 21 -> 37 -> 44

Pseudocode:

Two SingleLinkedLists S1 andS2 with sorted integer data are received as input parameters.
Create a SingleLinkedList named merged to hold the sorted merged SingleLinkedList.
Use a single while loop to iterate through both input SingleLinkedLists S1 andS2 at the same time, in each iteration:
Compare the node data of current nodes from S1 and S2.
Add the node with lesser value to merged SingleLinkedList.
Move to nextNode only for the input SingleLInkedList that’s node was moved to merged.
Return the merged SingleLinkedList.

Code:

public SingleLinkedList singleLinkListMergeLists(SingleLinkedList s1, SingleLinkedList s2) throws Exception{
	SingleLinkedListNode s1CurrNode=s1.getFirstNode();SingleLinkedListNode s2CurrNode=s2.getFirstNode();
	int s1Data=Integer.MAX_VALUE; int s2Data=Integer.MAX_VALUE;
	SingleLinkedList merged=new SingleLinkedList();
	while ((s1CurrNode != null)||(s2CurrNode !=null)) {
		s1Data=Integer.MAX_VALUE; s2Data=Integer.MAX_VALUE;
		if (s1CurrNode != null) {
			s1Data=s1CurrNode.getNodeData();
		}
		if (s2CurrNode != null) {
			s2Data=s2CurrNode.getNodeData();
		}
		if (s1Data < s2Data) {
			merged.addLast(s1Data);	
			s1CurrNode=s1CurrNode.getNextNode();
		}else {
			merged.addLast(s2Data);
			s2CurrNode=s2CurrNode.getNextNode();
		}		
	}
	return merged;
}

Click here to download and run code and test cases !