23. Merge k Sorted Lists
struct ListNode* mergeTwoLists(struct ListNode *l1,struct ListNode *l2) { if(l1==NULL) return l2; if(l2==NULL) return l1; if(l1->val<l2->val) { l1->next=mergeTwoLists(l1->next,l2); return l1; } else { l2->next=mergeTwoLists(l1,l2->next); return l2; } } struct ListNode* mergeKLists(struct ListNode** lists, int listsSize) { if(listsSize==0) return NULL; while(listsSize!=1) { int k=0; for(int i=0;i<listsSize;i+=2) { if(i==listsSize-1) lists[k++]=lists[i]; else lists[k++]=mergeTwoLists(lists[i],lists[i+1]); } listsSize=k; } return lists[0]; }