private static SinglyNode <int> InternalMergeSort(this SinglyNode <int> node) { if (node == null) { Throw.ArgumentNullException(nameof(node)); } if (node.Next == null) { return(node); } var middle = node.InternalMiddleNode(); var secondHalf = middle.Next; middle.Next = null; var left = InternalMergeSort(node); var right = InternalMergeSort(secondHalf); return(InternalMerge(left, right)); }