i007.cc

i007.cc

优先队列-降维打击

快速合并两个有序链表的算法

#include "pch.h"
#include <iostream>
#include <list>

std::list<int> MergeTwoList(const std::list<int>& list1, const std::list<int>& list2) {
    std::list<int> list_result;
    auto list_a(list1);
    auto list_b(list2);
    while (!list_a.empty() && !list_b.empty()) {
        auto head_a = list_a.front();
        auto head_b = list_b.front();
        if (head_a > head_b) {
            list_result.push_back(head_a);
            list_a.pop_front();
        }
        else if (head_a < head_b) {
            list_result.push_back(head_b);
            list_b.pop_front();
        }
        else {
            list_result.push_back(head_a);
            list_result.push_back(head_b);
            list_a.pop_front();
            list_b.pop_front();
        }
    }

    for (auto n : list_a) {
        list_result.push_back(n);
    }

    for (auto n : list_b) {
        list_result.push_back(n);
    }

    return list_result;
}


int main()
{
    std::cout << "Hello World!\n"; 
    std::list<int> list_a{ 6,4,3,1 };
    std::list<int> list_b{ 3,2,1 };

    std::list<int> list_ret = MergeTwoList(list_a, list_b);
    return 0;
}

 

发表回复