13. Merge sort for linked list

13. Merge sort for linked list

\

Problem link :- click here


package Linked_List;

public class LinkedList__13
{
	/*
	 	Merge sort
	 	
	 	Here merge sort will be slightly different.
	 	1 -> find the middle node.
	 		using two pointer approach (hare and tortoise)
	 	2 -> mergeSort(left sub list) 
	 	3 -> mergeSort(right sub list)
	 	4 -> merge(left, right)
	 		while merging we will add node by node recursively and return head.
	 */
	
	static Node merge(Node left, Node right)
	{
		if(left == null)
			return right;
		if(right == null)
			return left;
		
		Node result = null;
		
		if(left.data <= right.data)
		{
			result = left;
			result.next = merge(left.next, right);
		}
		else
		{
			result = right;
			result.next = merge(left, right.next);
		}
		
		return result;
	}
	
	static Node mergeSort(Node head)
	{
		if(head == null   ||    head.next == null)
			return head;
		
		Node middle_node = middleNode(head);
		Node next_to_middle = middle_node.next;
		
		//splitting the linked list
		middle_node.next = null;
		
		//sorting the left and right sub list
		Node left = mergeSort(head);
		Node right = mergeSort(next_to_middle);
		
		//merging left and right sub list 
		Node sorted_list = merge(left, right);
		
		return sorted_list;
	}
	
	static Node middleNode(Node head)
	{
		if(head==null)
			return head;
		
		Node slow = head;
		Node fast = head;
		
		while(fast.next != null  &&  fast.next.next != null)
		{
			slow = slow.next;
			fast = fast.next.next;
		}
		
		return slow;
	}
	
	public static void main(String[] args)
	{
		LinkedList list = new LinkedList();
		list.push(15);
		list.push(10);
		list.push(5);
		list.push(20);
		list.push(3);
		list.push(2);
		
		System.out.println("Unsorted linked list : ");
		printList(list);
		
		LinkedList sorted_list = new LinkedList();
		sorted_list.head = mergeSort(list.head);
		
		System.out.println("\nSorted linked list : ");
		printList(sorted_list);
	}

	static void printList(LinkedList list)
	{
		for(Node temp=list.head; temp!=null; temp=temp.next)
			System.out.print(temp.data + "-> ");
		System.out.println("null");
	}
}

Time complexity :- O(n* log(n))
Space complexity :- O(n)

Comments

Popular posts from this blog

4.Sort an array of 0's, 1's & 2's.

1. Reverse

3. Height of Binary tree