自学内容网 自学内容网

力扣23.合并K个升序链表

力扣23.合并K个升序链表

  • 因为所有链表都是升序

    • 第一次取节点一定是某个链表的头节点
    • 之后每次取 就一定是当前节点的下一个,或每个链表的最前面节点
    • 所以在取节点之后 将其下一个节点加入队列作为补充
  • decltype函数:

    • 自行推断类型 类似于auto
  •   class Solution {
      public:
          ListNode* mergeKLists(vector<ListNode*>& lists) {
              auto cmp = [](const ListNode *a,const ListNode *b) -> bool {
                  return a->val > b->val;
              };
              priority_queue<ListNode*,vector<ListNode*>,decltype(cmp)> q;
              for(auto head:lists)
                  if(head)
                      q.push(head);
              ListNode dummyhead{};
              auto cur = &dummyhead;
              while(!q.empty())
              {
                  auto node = q.top();
                  q.pop();
                  if(node -> next)
                      q.push(node->next);
                  cur->next = node;
                  cur = cur->next;
              }
              return dummyhead.next;
          }
      };
    

原文地址:https://blog.csdn.net/Pisasama/article/details/140600318

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!