题解 | #合并k个已排序的链表#
合并k个已排序的链表
https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
/** * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* Merge(struct ListNode* pHead1, struct ListNode* pHead2 ) { struct ListNode* yhead = (struct ListNode*)malloc(sizeof(struct ListNode)); struct ListNode* cur = yhead; while (pHead1 && pHead2) { if (pHead1->val <= pHead2->val) { cur->next = pHead1; pHead1 = pHead1->next; } else { cur->next = pHead2; pHead2 = pHead2->next; } cur = cur->next; } cur->next = pHead1 ? pHead1 : pHead2; return yhead->next; } /** * * @param lists ListNode类一维数组 * @param listsLen int lists数组长度 * @return ListNode类 */ struct ListNode* mergeKLists(struct ListNode** lists, int listsLen ) { //只有一个链表或者空链表 if (listsLen <=1) { return *lists; } while (1) { for (int i = 0; i < listsLen / 2; i++) { lists[i] = Merge(lists[i], lists[listsLen - i - 1]); } if (listsLen == 2) { break; } listsLen = listsLen % 2 == 1 ? listsLen / 2 + 1 : listsLen / 2; } return *lists; }