一、题目概述
给定非空单链表L1, L2,知其一结点数时另一链表的两倍或以上。
要求将短链表逆置,插入长链表。
二、代码(PAT暂未收录,不保证正确)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
struct node
{
int data, addr, next;
};
int main()
{
int head[2], N;
scanf("%d %d %d", &head[0], &head[1], &N);
vector<node> a(100000), L[2], ans;
for( int i = 0; i < N; ++i )
{
node temp;
scanf("%d %d %d", &temp.addr, &temp.data, &temp.next);
a[temp.addr] = temp;
}
for( int i = 0; i < 2; ++i )
for( int j = head[i]; j != -1; j = a[j].next )
L[i].push_back(a[j]);
if( L[0].size() < L[1].size() )
swap(L[0], L[1]);
reverse(L[1].begin(), L[1].end());
for( int i = 0, j = 0; i < L[0].size(); ++i )
{
ans.push_back(L[0][i]);
if(i && i % 2 && j < L[1].size())
ans.push_back(L[1][j++]);
}
for( int i = 0; i < ans.size(); ++i )
if( !i )
printf("%05d %d ", ans[i].addr, ans[i].data);
else printf(" %05d\n%05d %d ", ans[i].addr, ans[i].addr, ans[i].data);
printf("-1");
}