题目来源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; } } };