Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.
Example:
Input: [ 1->4->5, 1->3->4, 2->6 ] Output: 1->1->2->3->4->4->5->6
分析:
一开始想的是k路归并,后来仔细一想,k路归并会多很多没必要的判断,直接使用merge相邻的两个链表就好了。这里有个技巧,
归并的时候,一种是遍历归并,即链表0不断和1,2,3,4,...,的链表归并,随着归并的数量增加,链表0会变得越来越长,效率也会越来越低。比较好的方法是,0和1归并,2和3,4和5,...,这样一直循环到只剩下最后一个链表,这种方法避免了归并的时候链表0越来越长导致的效率下降。
下面实现的时候借鉴了LeetCode答案区的答案,即第0个链表和最后一个链表归并,第1个和倒数第二个归并,看代码就好
代码:
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution {
p