public ListNode MergeKLists(ListNode[] lists) { switch(lists.Length) { case 0: return null; case 1: return lists.First(); default: var newLists = new ListNode[(lists.Length + 1) / 2]; for (var index = 0; index < lists.Length; index += 2) { newLists[index / 2] = index == lists.Length - 1 ? lists[index] : this.Merge2Lists( lists[index] , lists[index + 1]); } return this.MergeKLists(newLists); } }