题解 | #合并k个已排序的链表#
合并k个已排序的链表
https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ #include <climits> class Solution { public: ListNode *mergeKLists(vector<ListNode *> &lists) { auto head=new ListNode(0);//新建头结点 auto cur=head; int linesNum=lists.size(); int minNum; int minlist; while(1) { minNum=INT_MAX;//由于要找最小值,初始化为最大值 for(int i=0;i<linesNum;i++)//找最小值 { if(lists[i]!=nullptr&&lists[i]->val<minNum) { minNum=lists[i]->val;//记录最小值 minlist=i;//记录最小值所在输入链表 } } if(minNum==INT_MAX)break; //找不到最小值,即lists内指针都为nullptr,没有剩余 cur->next=lists[minlist];//最小值加入输出链表 lists[minlist]=lists[minlist]->next;//最小值去除输入链表 cur=cur->next;//输出链表后移 } return head->next; } };