public static void Main(string[] args)
var first = new Node(15);
first.Push(10).Push(5).Push(20).Push(3).Push(2);
var sorted = MergeSort(first);
Console.WriteLine("=============== After sorting ===============");
static Node Merge(Node first, Node second)
if (first.Data < second.Data)
result.Next = Merge(first.Next, second);
result.Next = Merge(first, second.Next);
static Node MergeSort(Node node)
var middle = GetMiddle(node);
var nextToMiddle = middle.Next;
nextToMiddle = MergeSort(nextToMiddle);
var sortedLinkedList = Merge(node, nextToMiddle);
static Node GetMiddle(Node node)
var fastPointer = node.Next;
while (fastPointer != null)
fastPointer = fastPointer.Next;
fastPointer = fastPointer.Next;
slowPointer = slowPointer.Next;
Console.Write(node.Data + " ");
public int GetLengthIterative()
public int GetLengthRecursive()
return 1 + this.Next.GetLengthRecursive();
public Node Push(int data)
var node = new Node(data);
public override string ToString()