【LeetCode 23】合并K个排序链表
题目链接 【题解】 会归并排序吧? 就把这K个链表当成是K个数字就好。 然后做归并排序。 因为归并排序的时候本来就会有这么一个过程。 [l..mid]和[mid+1..r]这两段区间都是有序的了已经。 然后再把他们俩合并起来。 合并起来之后把这个链表直接放在这个区间的最左边那个位置就好 上一级的合并要用的时候就直接取这个区间最左边那个链表。 有个人关于时间复杂度的证明说的挺好的贴一下 【代码】 /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: void merge(vector<ListNode*> &lists,int l,int r){ if (l>=r) return; int mid = (l+r)>>1; merge(lists,l,mid);merge(lists,mid+1,r); ListNode *temp = (ListNode *) malloc(sizeof(ListNode)); temp->next =NULL; ListNode *p = temp; ListNode *p1