题解 | #合并k个已排序的链表#

合并k个已排序的链表

https://www.nowcoder.com/practice/65cfde9e5b9b4cf2b6bafa5f3ef33fa6

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
  	//返回两个有序链表合成的有序列表
    ListNode *sort(ListNode* list1,ListNode* list2){
        if(!list1)
            return list2;
        if(!list2)
            return list1;
        ListNode *newHead= new ListNode(0);
        ListNode* newTail, *tmp;
        newTail = newHead;
        while(list1 && list2){
            if(list1->val<list2->val){
                tmp = list1->next;
                list1->next = NULL;
                newTail->next = list1;
                newTail = list1;
                list1 = tmp;
            }
            else{
                tmp = list2->next;
                list2->next = NULL;
                newTail->next = list2;
                newTail = list2;
                list2 = tmp;
            }
        }
        if(list1)
            newTail->next = list1;
        if(list2)
            newTail->next = list2;
        return newHead->next;
    }
	
  	//递归代码实现归并排序,大问题逐步划分,直到小问题变成2个链表调用sort()合并 或 只有1个链表时返回
    ListNode *merge(vector<ListNode *> lists,int start,int end){
        if(start==end)
            return lists[start];
        if(end-start == 1)
            return sort(lists[start],lists[end]);
        int mid = start+(end-start)/2;
        ListNode* left = merge(lists,start,mid);
        ListNode* right = merge(lists,mid+1,end);
        return sort(left,right);    
    }
    ListNode *mergeKLists(vector<ListNode *> &lists) {
        int start = 0;
        int end = lists.size()-1;
        if(end<start)  //lists长度为0,返回NULL
            return NULL;
        return merge(lists,start,end);
    }
};

全部评论

相关推荐

风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
点赞 评论 收藏
分享
看到这个内容真是闹麻了。。。。。。现在有了AI以后很多人面试都会作弊吗?&nbsp;那对老老实实面试的人岂不是不公平....
程序员牛肉:公平那是对小孩子讲的童话故事,成年人的世界只有能不能接受失败的后果。 你要是能接受面试作弊被发现之后多家公司联合永久拉黑的后果,你就搞。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务