题目
描述
合并 k 个升序的链表并将结果作为一个升序的链表返回其头节点。
数据范围:节点总数 0≤n≤5000,每个节点的val满足 ∣val∣<=1000
要求:时间复杂度 O(nlogn)
思路
遍历K个升序链表,将值保存到一个list里面,然后排序,根据排序后的结果重新构建一个链表。
代码
python版本:
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param lists ListNode类一维数组
# @return ListNode类
#
class Solution:
def mergeKLists(self , lists: List[ListNode]) -> ListNode:
# write code here
length = len(lists)
tmp = []
for pl in lists:
while(pl):
tmp.append(pl.val)
pl = pl.next
if not tmp:
return None
sg = ListNode(-1)
nh = sg
tmp.sort()
for v in tmp:
node = ListNode(v)
sg.next=node
sg = sg.next
return nh.next
c++版本:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
public:
ListNode *mergeKLists(vector<ListNode *> &lists) {
vector<int> tmp;
int len = lists.size();
ListNode *sg = new ListNode(-1);
ListNode *nh = sg;
for(int i=0; i<len; i++){
ListNode *pl = lists[i];
while(pl){
tmp.push_back(pl->val);
pl=pl->next;
}
}
if(tmp.size()==0){
return sg->next;
}
sort(tmp.begin(), tmp.end());
for(int j=0; j<tmp.size(); j++){
// ListNode node = ListNode(tmp[j]);
// sg->next = &node;
sg->next = new ListNode(tmp[j]);
sg = sg->next;
}
return nh->next;
}
};