题解 | #合并k个已排序的链表#
合并k个已排序的链表
https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
public ListNode mergeKLists (List<ListNode> lists) { //先把空的元素剔除 for (int i = 0; i < lists.Count; i++) { if (lists[i] == null) { lists.RemoveAt(i); i--; } } //全空就返回0 if (lists.Count == 0) { return null; } //就一个元素就返回这个元素头 if (lists.Count < 1) { return lists[0]; } //给新的链表来一个虚拟头 ListNode VirtualHead = new ListNode(0); //这里表示新链表的最新的一个节点 ListNode NowPtr = VirtualHead; //用序号来表示集合中最小的元素的位置 int GetMin = 0; //当集合元素为空时,意味着排序完成了 while (lists.Count != 0) { //进行多轮选择,每轮到一个就拿来和GetMin位置上的元素进行比较,值小的那个用来就把序号赋值给GetMin for (int i = 0; i < lists.Count; i++) { if (lists[i].val < lists[GetMin].val) { GetMin = i; } } //进行到最后没有元素了就退出来 if (lists.Count == 0) { break; } NowPtr.next = lists[GetMin]; NowPtr = NowPtr.next; lists[GetMin] = lists[GetMin].next; if (lists[GetMin] == null) { lists.RemoveAt(GetMin); GetMin = 0; } } return VirtualHead.next; // write code here }