链表 合并

image.png
image.png
分析:

  1. 把给定的地址信息和地址对应的值存起来,用n[N], 和ne[N]来存储
  2. 根据n[N]和ne[N]数组,将这两个链表抽取出来,分别存储到vector的a和b中,每个元素的存储方式采取C++中的pair<int, int>来实现
  3. 根据题目要求的输出规则,将每个数据以pair<int, int>的形式存储到vector的c中。
  4. 输出c向量即可。
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
const int N = 1e5 + 10;
typedef pair<int, int> PII;
int h1, h2, n, e[N], ne[N];
int main(){
    int addr1, addr2, number;
    cin >> h1 >> h2 >> n;
    for(int i = 0; i < n; i++){
        cin >> addr1 >> number >> addr2;
        e[addr1] = number;
        ne[addr1] = addr2;
    }
    vector<PII> a, b, c;
    for(int i = h1; i != -1; i = ne[i]) a.push_back({i, e[i]});
    for(int i = h2; i != -1; i = ne[i]) b.push_back({i, e[i]});
    if (a.size() < b.size())    swap(a, b);
    for(int i = 0, j = b.size() - 1; i < a.size(); i += 2, j--){
        c.push_back(a[i]);
        if (i + 1 < a.size())   c.push_back(a[i + 1]);
        if (j >= 0) c.push_back(b[j]);
    }
    for(int i = 0; i < c.size(); i++){
        printf("%05d %d ", c[i].first, c[i].second);
        if (i + 1 < c.size())   printf("%05d\n", c[i + 1].first);
        else    cout << -1;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KevinHQK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值