public static ListNode MergeKLists(ListNode[] lists) { if (lists == null || lists.Count() == 0) return null; if (lists.Count() == 1) { return lists[0]; } List<int> numbers = new List<int>(); foreach (var list in lists) { var tempList = list; int middle = numbers.Count(); while (tempList != null) { numbers.Add(tempList.val); tempList = tempList.next; } if (numbers.Count() > 0 && middle != numbers.Count()) { //两两归并 Merge(numbers, 0, middle, numbers.Count()); } } if (numbers.Count() > 0) { ListNode node = new ListNode(numbers[0]); ListNode head = node; int i = 1; while (i < numbers.Count) { node.next = new ListNode(numbers[i]); node = node.next; i++; } return head; } else return null; }
public static ListNode MergeKLists1(ListNode[] lists) { if (lists == null || lists.Count() == 0) return null; if (lists.Count() == 1) { return lists[0]; } ListNode node = new ListNode(-1); ListNode head = node; node.next = lists[0]; for (int i = 1; i < lists.Count(); i++) { if (lists[i] != null) { node.next = MergeListNode(node.next, lists[i]); } } return head.next; }