合并K个有序链表

    xiaoxiao2022-07-07  163

    题目描述:

    合并 k 个排序链表,返回合并后的排序链表。请分析和描述算法的复杂度。

    示例: 输入: [ 1->4->5, 1->3->4, 2->6 ] 输出: 1->1->2->3->4->4->5->6

    C++代码如下:

    /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */ class Solution { public: ListNode* mergeKLists(vector<ListNode*>& lists) { if (lists.empty()) return NULL; int n = lists.size(); while (n>1){ int k = (n+1)/2; for (int i = 0; i<n/2; ++i){ lists[i] = mergeTwoLists(lists[i],lists[i+k]); } n = k; } return lists[0]; } ListNode* mergeTwoLists( ListNode *l1, ListNode *l2){ ListNode *temp = new ListNode(-1) ,*p = temp; while (l1 && l2){ if (l1->val < l2->val){ p->next = l1; l1 = l1->next; } else{ p->next = l2; l2 = l2->next; } p = p->next; } if (l1) p->next = l1; if (l2) p->next = l2; return temp->next ; } };
    最新回复(0)