Merge k Sorted Lists

来源:互联网 发布:网络医疗是什么 编辑:程序博客网 时间:2024/06/06 03:46
/*排序问题:本题是将k个排好序的链表整合到一个链表中具体的做法为:首先进行两两合并,然后循环进行下去合并Merge k Sorted ListsMerge k sorted linked lists and return it as one sorted list.Analyze and describe its complexity.*/#include<iostream>#include<vector>using namespace std;struct ListNode{int val;ListNode *next;ListNode(int x) :val(x), next(nullptr) {}};class Solution{public:ListNode *init(vector<int>&vec) //链表的初始化{ListNode dummy(-1);ListNode *p = &dummy;for (int i = 0; i < vec.size(); i++, p = p->next){p->next = new ListNode(vec[i]);//重要}return dummy.next;}//merge k sorted listsListNode*merge_k(vector<ListNode *>& lists){if (lists.size() == 0) return nullptr;ListNode *p=lists[0];for (int i = 1; i < lists.size(); i++){p = merge_2(p, lists[i]);}return p;}//merge 2 listsListNode *merge_2(ListNode *list1, ListNode *list2){ListNode dummy(-1);ListNode *p = &dummy;for (; list1 != nullptr || list2 != nullptr; p = p->next)//判断条件为 或{int value1 = list1 == nullptr ? INT_MAX : list1->val;//当链表为空时,取最大值,即是转换到里一个链表int value2 = list2 == nullptr ? INT_MAX : list2->val;if (value1 > value2){p->next = list2;list2 = list2->next;}else{p->next = list1;list1 = list1->next;}}return dummy.next;}//printvoid print(ListNode * head){while (head != nullptr){cout << head->val << ",";head = head->next;}cout << endl;}};int main(){Solution s1;vector<int>v1{ 1, 2, 3, 4 };vector<int>v2{ 5, 6, 7 };vector<int>v3{ 8, 8, 9, 10 };ListNode *list1 = s1.init(v1);ListNode *list2 = s1.init(v2);ListNode *list3 = s1.init(v3);vector<ListNode*>vec1{list1,list2,list3};//s1.print(s1.init(v1));s1.print(s1.merge_k(vec1));system("pause");return 0;}

0 0
原创粉丝点击