zoukankan      html  css  js  c++  java
  • LeetCode 23 Merge k Sorted Lists

    Description

    Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

    多路排序的一个例子,用优先权队列保存指针,每次选出有最小的权值的指针,将其指向的节点加入结果链表。

    努力改良自己代码风格,让自己的代码变得好看。Open-mouthed smile

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        struct cmp
        {
            bool operator()(ListNode *a, ListNode *b)
            {
                return a->val > b->val;
            }
        };
        priority_queue<ListNode*, vector<ListNode* >, cmp > pq;
    
        ListNode* mergeKLists(vector<ListNode*>& lists) {
            for(int i = 0; i < lists.size(); i++)
            {
                if(lists[i] != NULL)
                {
                    pq.push(lists[i]);
                }
            }
            ListNode *head = NULL;
            ListNode *p = NULL;
            while(!pq.empty())
            {
                ListNode *tmp = pq.top(); 
                pq.pop();
                
                if(head == NULL)
                {
                    head = new ListNode(tmp->val);
                    p = head;
                }
                else
                {
                    ListNode *t = new ListNode(tmp->val);
                    p->next = t;
                    p = t;
                }
                tmp = tmp->next;
                if(tmp != NULL)
                    pq.push(tmp);
            }
    
            return head;
        }
    };
    如果有错误,请指出,谢谢
  • 相关阅读:
    1026 Table Tennis (30)
    1029 Median
    1025 PAT Ranking (25)
    1017 Queueing at Bank (25)
    1014 Waiting in Line (30)
    1057 Stack (30)
    1010 Radix (25)
    1008 Elevator (20)
    字母大小写转换
    Nmap的基础知识
  • 原文地址:https://www.cnblogs.com/Alruddy/p/7104848.html
Copyright © 2011-2022 走看看