PAT-A 2019秋季考试7-2 Merging Linked Lists
题目大意:给出两个长短链表,确保短链表长度*2一定小于等于长链表长度,短链表翻转并按照间隔2个顺序插入长链表,最终输出
仅通过样例并未测试,哪位大佬如果正好看到了 可以帮我测试一下谢谢
#include<bits/stdc++.h>
using namespace std;
struct node{
int address, data, next;
};
unordered_map<int, node*> mp;
int getlength(int x){
int sum = 1;
while(mp[x]->next != -1){
sum++;
x = mp[x]->next;
}
return sum;
}
int reverseLinkedlist(int x){
stack<node*> s;
while(mp[x]->next != -1){
s.push(mp[x]);
x = mp[x]->next;
}
int start = x;
while(!s.empty()){
mp[x]->next = s.top()->address;
x = s.top()->address;
s.pop();
}
mp[x]->next = -1;
return start;
}
void insertion_print(int a, int b){
int t = 1;
while(a != -1){
if(t % 2 == 0 && b != 0){
printf("%05d %d %05d\n", mp[a]->address, mp[a]->data, mp[b]->address);
if(mp[a]->next != -1){
printf("%05d %d %05d\n", mp[b]->address, mp[b]->data, mp[a]->next);
}else{
printf("%05d %d -1\n", mp[b]->address, mp[b]->data);
}
b = mp[b]->next;
}else{
if(mp[a]->next != -1){
printf("%05d %d %05d\n", mp[a]->address, mp[a]->data, mp[a]->next);
}else{
printf("%05d %d -1\n", mp[a]->address, mp[a]->data);
}
}
a = mp[a]->next;
t++;
}
}
int main(){
int a, b, n;
scanf("%d %d %d", &a, &b, &n);
int address, data, next;
for(int i = 0; i < n; i++){
scanf("%d %d %d", &address, &data, &next);
mp[address] = new node({address, data, next});
}
int lena = getlength(a);
int lenb = getlength(b);
if(lenb > lena){
swap(a, b);
}
b = reverseLinkedlist(b);
insertion_print(a, b);
}