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

合并k个已排序的链表

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

/**
 * struct ListNode {
 *	int val;
 *	struct ListNode *next;
 *	ListNode(int x) : val(x), next(nullptr) {}
 * };
 */

constexpr int kInvalidIndex = -1;

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param lists ListNode类vector 
     * @return ListNode类
     */
    ListNode* mergeKLists(vector<ListNode*>& lists) {
        // write code here

        ListNode dummy_node(-1);
        ListNode* tail = &dummy_node;

        int num_empty_list = 0;
        int num_list = lists.size();

        while(num_empty_list < num_list){
            int argmin_idx = kInvalidIndex;
            num_empty_list = 0;
            for(int i=0; i<num_list; ++i){
                if(lists[i]==nullptr){
                    ++num_empty_list;
                    continue;
                }
                if(((argmin_idx==kInvalidIndex)||lists[i]->val<lists[argmin_idx]->val)){
                    argmin_idx = i;
                }
            }
            if(argmin_idx==kInvalidIndex){
                break;
            }

            tail->next = lists[argmin_idx];
            lists[argmin_idx] = lists[argmin_idx]->next;
            tail = tail->next;
        }
        return dummy_node.next;
    }
};

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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