题解 | #合并k个已排序的链表#
合并k个已排序的链表
https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6
/**
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param lists ListNode类一维数组
* @param listsLen int lists数组长度
* @return ListNode类
*/
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2);
struct ListNode* mergeKLists(struct ListNode** lists, int listsLen )
{
if(lists == NULL) return NULL;
int i = 1;
struct ListNode *newHead = *lists;
while(i < listsLen)
{
struct ListNode *PTR = *(lists+i);
newHead = mergeTwoLists(newHead, PTR);
i++;
}//将输入数组中的链表两两merge
return newHead;
}
struct ListNode* mergeTwoLists(struct ListNode *list1, struct ListNode *list2)
{
if(!list1) return list2;
if(!list2) return list1;
if(list1->val > list2->val)
{
list2->next = mergeTwoLists(list1, list2->next);
return list2;
}
else
{
list1->next = mergeTwoLists(list1->next, list2);
return list1;
}//使用递归方法merge两个升序链表
}
查看3道真题和解析