题目来源LeetCode.23 Merge k Sorted Lists
题意:将多个已经排好序的链表合并成一个排好序的链表
主要的思想就是课堂上所学的Divide and Conquer,将大问题分成若干个小问题。在这里可以将链表不断两两合并,最后形成的就是一个排好序的总的链表。
代码段如下:
/**
* 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) {
if(lists.size() == 0)return NULL;
while(lists.size() > 1){
ListNode *list1 = lists.front();
lists.erase(lists.begin());
ListNode *list2 = lists.front();
lists.erase(lists.begin());
ListNode *result= merge(list1,list2);
lists.push_back(result);
}
return lists.front();
}
private:
ListNode *merge(ListNode *list1, ListNode *list2){
if(list1 == NULL){
return list2;
}
else if(list2 == NULL){
return list1;
}
else if(list1->val <= list2->val){
list1->next = merge(list1->next, list2);
return list1;
}
else{
list2->next = merge(list1, list2->next);
return list2;
}
}
};