想法十分简单粗暴但有效,将首个链表头作为起点,然后依次遍历各个链表,每个链表再将节点依次插入首个链表中。
/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode() : val(0), next(nullptr) {}* ListNode(int x) : val(x), next(nullptr) {}* ListNode(int x, ListNode *next) : val(x), next(next) {}* };*/
class Solution {
public:ListNode* mergeKLists(vector<ListNode*>& lists) {if(lists.size()==0) return nullptr;ListNode* result=new ListNode(0,lists[0]);for(int i=1;i<lists.size();i++){ListNode* l=lists[i];ListNode* r=result->next;ListNode* pre=result;while(l){ListNode* ln=l->next;bool b=0;while(r){if(r->val>=l->val){b=1;pre->next=l;l->next=r;pre=l;}if(b==1) break;pre=r;r=r->next;}if(b==0){pre->next=l;break;}l=ln;}}return result->next;}
};