PAT B1105 链表合并

#include<iostream>
#include<map>
#include<vector>
#include<algorithm>
using namespace std;
struct Node {
    string address;
    int data;
    string next;
};
int main() {
    string address1, address2;
    string address, next;
    int n, data;
    map<string, Node> list;
    vector<Node> list1, list2, listans;
    cin >> address1 >> address2 >> n;
    while (n--) {
        cin >> address >> data >> next;
        Node node;
        node.address = address;
        node.data = data;
        node.next = next;
        list[address] = node;
    }

    while (1) {
        if (address1 == "-1") break;
        list1.push_back(list[address1]);
        address1 = list[address1].next;
    }
    while (1) {
        if (address2 == "-1") break;
        list2.push_back(list[address2]);
        address2 = list[address2].next;
    }
    if (list2.size() < list1.size()) {
        reverse(list2.begin(), list2.end());
    }
    else {
        reverse(list1.begin(), list1.end());
    }
    int index1, index2;
    for (index1 = 0, index2 = 0; index1<list1.size() && index2 < list2.size();) {
        if (list1.size() > list2.size()) {
            listans.push_back(list1[index1++]);
            listans.push_back(list1[index1++]);
            listans.push_back(list2[index2++]);
        }
        else {
            listans.push_back(list2[index2++]);
            listans.push_back(list2[index2++]);
            listans.push_back(list1[index1++]);
        }
    }
    for (; index1 < list1.size();) {
        listans.push_back(list1[index1++]);
    }
    for (; index2 < list2.size();) {
        listans.push_back(list2[index2++]);
    }

    for (int i = 0; i < (listans.size() - 1); i++) {
        cout << listans[i].address << " " << listans[i].data << " " << listans[i + 1].address << endl;
    }
    cout << listans[listans.size() - 1].address << " " << listans[listans.size() - 1].data << " -1" << endl;
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容