题解 | #合并k个已排序的链表#
合并k个已排序的链表
https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
using System; using System.Collections.Generic; /* public class ListNode { public int val; public ListNode next; public ListNode (int x) { val = x; } } */ class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param lists ListNode类一维数组 * @return ListNode类 */ public ListNode mergeKLists (List<ListNode> lists) { int k = lists.Count; if (k == 0) return null; while (k > 1) { for (int i = 0; i < k / 2; i++) { lists[i] = MergeTwoLists(lists[2 * i], lists[2 * i + 1]); } if (k % 2 != 0) { lists[k / 2] = lists[k - 1]; k = k / 2 + 1; continue; } k = k / 2; } return lists[0]; } public ListNode MergeTwoLists(ListNode list1, ListNode list2) { ListNode newHead = new ListNode(0); ListNode cur = newHead; while (true) { if (list1 == null) { cur.next = list2; break; } if (list2 == null) { cur.next = list1; break; } if (list1.val > list2.val) { cur.next = list2; cur = cur.next; list2 = list2.next; } else { cur.next = list1; cur = cur.next; list1 = list1.next; } } return newHead.next; } }