题目: https://leetcode-cn.com/problems/merge-k-sorted-lists/ 代码: /**
Definition for singly-linked list.struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; */ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
ListNode *pl1 = l1; ListNode *pl2 = l2; ListNode head(0); ListNode *phead = &head; while (pl1 != NULL&&pl2 != NULL) { if (pl1->val < pl2->val) { phead->next = pl1; phead = phead->next; pl1 = pl1->next; } else { phead->next = pl2; phead = phead->next; pl2 = pl2->next; } } if (pl1 == NULL) { phead->next = pl2; } if (pl2 == NULL) { phead->next = pl1; } return head.next;}
class Solution { public: ListNode* mergeKLists(vector<ListNode*>& lists) {
if (lists.empty()) return NULL; int size = lists.size(); if (size == 1) { return lists[0]; } if (size == 2) { return mergeTwoLists(lists[0], lists[1]); } int mid = size / 2; vector<ListNode *> sublist0; vector<ListNode *> sublist1; for (int i = 0; i < mid; i++) { sublist0.push_back(lists[i]); } for (int i = mid ; i < size; i++) { sublist1.push_back(lists[i]); } ListNode * l0 = mergeKLists(sublist0); ListNode *l1 = mergeKLists(sublist1); return mergeTwoLists(l0, l1);} };
结果: