LeedCode_合并K个排序链表

纵饮孤独 提交于 2020-01-29 02:56:28

LeedCode_合并K个排序链表

题目说明

合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

输入:
[
1->4->5,
1->3->4,
2->6
]
输出: 1->1->2->3->4->4->5->6

链接:https://leetcode-cn.com/problems/merge-k-sorted-lists
分析:提高效率的方法,将链表中的数据存储到数组中,在数组中排序,在进行重新组链。

ListNode* mergeKLists(vector<ListNode*>& lists) 
	{
		ListNode* res;
		int n = lists.size();
		if (n == 0)
		{
			return NULL;
		}
		if (n == 1)
		{
			return lists[0];
		}
		vector<int> nums;
		for (int i = 0; i < n; i++)
		{
			ListNode* p=lists[i];
			while (p!=NULL)
			{
				nums.push_back(p->val);
				p = p->next;
			}
		}
		if (nums.size() == 0)
		{
			return NULL;										//针对{{},{}}的测试用例
		}
		sort(nums.begin(), nums.end());
		res= new ListNode(nums[0]);
		res->next = NULL;
		ListNode* pre = res;
		for (int i = 1; i < nums.size(); i++)
		{
			ListNode* q = new ListNode(nums[i]);
			q->next = pre->next;
			pre->next = q;
			pre = q;
		}
		return res;
	}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!