zoukankan      html  css  js  c++  java
  • LeetCode题解:《23.合并K个升序链表》

    image

    #include <iostream>
    #include <vector>
    #include "leetcode.h"
    
    using namespace std;
    
    class Solution {
    public:
        void sort(vector<ListNode*>& lists) {
            ushort i = 0, length = lists.size();
            for (ushort ii = 0; ii < length; ++ii) {
                if (lists.at(ii) == nullptr)
                    continue;
                if (lists.at(i) == nullptr || lists.at(i)->val > lists.at(ii)->val)
                    i = ii;
            }
            ListNode* temp = lists.at(i);
            lists.at(i) = lists.at(0);
            lists.at(0) = temp;
        }
    
        ListNode* mergeKLists(vector<ListNode*>& lists) {
            if (lists.size() == 0)
                return nullptr;
            sort(lists);
            ListNode* ans = lists.front();
    
            ListNode* begin, * end, * temp;
            // 如果要归并的链到达尾节点,则跳出循环
            bool flag = true;
            for (int i = 1; i < lists.size(); ++i) {
                begin = ans;
                temp = lists.at(i);
                // 如果该链为空直接跳过
                if (!temp) continue;
                if (nullptr == begin) { ans = temp; continue; }
                while (flag) {
                    // 循环找出适合ans链接到temp的node
                    while (begin->next && begin->next->val < temp->val) {
                        begin = begin->next;
                    }
                    // 留一个指针继续搜索ans找到适合temp链接ans的node
                    end = begin->next;
                    if (nullptr == end) {
                        begin->next = temp;
                        flag = false;
                        continue;
                    }
    
                    begin->next = temp;
                    ListNode* btemp = temp;
                    while (nullptr != temp && nullptr != end && temp->val <= end->val) {
                        btemp = temp;
                        temp = temp->next;
                    }
                    if (nullptr == temp)
                        flag = false;
                    btemp->next = end;
                }
                flag = true;
            }
            return ans;
        }
    };
    
  • 相关阅读:
    设计一个字符串类,并将字符串处理函数的内容进行封装
    C++字符串处理函数【自写】
    文件共享服务器nfs搭建过程
    svn服务器的搭建过程 主要为服务端
    uwsgi和wsgi
    熟悉了下HTTP协议
    ModelForm views.py
    隐藏tomcat nginx版本信息
    csrf
    开发模式
  • 原文地址:https://www.cnblogs.com/itcod/p/15090730.html
Copyright © 2011-2022 走看看