PAT乙级的一条“链表合并”,有几个测试点通不过,不知道什么原因

问题遇到的现象和发生背景

img

问题相关代码,请勿粘贴截图
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
struct node {
    int data, next;
}list[100000];
int main()
{
    int st1, st2, n, a;
    vector<int> v1, v2, v;
    cin >> st1 >> st2 >> n;
    for (int i = 0; i < n; i++) {
        cin >> a;
        cin >> list[a].data >> list[a].next;
    }
    int p1 = st1, p2 = st2;
    while (p1 != -1) {
        v1.push_back(p1);
        p1 = list[p1].next;
    }
    while (p2 != -1) {
        v2.push_back(p2);
        p2 = list[p2].next;
    }
    if (v1.size() > v2.size()) {
        reverse(v2.begin(), v2.end());
        for (int i = 0, cnt = 0; i < v1.size(); i++) {
            if (i > 0 && i % 2 == 0 && cnt < v2.size()) v.push_back(v2[cnt++]);
            v.push_back(v1[i]);
        }
        for (int i = 0; i < v.size() - 1; i++) {
            printf("%05d %d %05d\n", v[i], list[v[i]].data, v[i+1]);
        }
        printf("%05d %d -1\n", v[v.size() - 1], list[v[v.size() - 1]].data);
    } else {
        reverse(v1.begin(), v1.end());
        for (int i = 0, cnt = 0; i < v2.size(); i++) {
            if (i > 0 && i % 2 == 0 && cnt < v1.size()) v.push_back(v1[cnt++]);
            v.push_back(v2[i]);
        }
        for (int i = 0; i < v.size() - 1; i++) {
            printf("%05d %d %05d\n", v[i], list[v[i]].data, v[i+1]);
        }
        printf("%05d %d -1\n", v[v.size() - 1], list[v[v.size() - 1]].data);
    }
    return 0; 
}




运行结果及报错内容

img

我的解答思路和尝试过的方法
我想要达到的结果