예제 #1
0
        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;
        }
예제 #2
0
        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;
        }