7-5 链表合并
这个题真的真的真的。。。乙级题库里链表的题我觉得比这道难
坑的话 我觉得就是先要判断l1 和 l2谁长(我第一次提交就没判断。。,好像就一个测试点是1比2长。。)
之后就是reverse函数 这个《算法笔记》里有。。我都用好几个月了。。。
最后就是地址要5位数输出%05d 没啦
甲级见
#include<stdio.h>
#include<algorithm>
using namespace std;
struct node{
int address;
int next;
int data;
};
int main(){
node a[100000];
int abegin,bbegin,n;
scanf("%d %d %d",&abegin,&bbegin,&n);
for(int i=0;i<n;i++){
int add,val,nex;
scanf("%d %d %d",&add,&val,&nex);
a[add].address=add;
a[add].data=val;
a[add].next=nex;
}
int num1=0,num2=0;
node l[100000];
node s[100000];
int p=abegin;
while(p!=-1){
l[num1++]=a[p];
p=a[p].next;
}
p=bbegin;
while(p!=-1){
s[num2++]=a[p];
p=a[p].next;
}
if(num1>num2){
reverse(s,s+num2);
int lnum=0,snum=0,sum=0;
while(sum<num1+num2){
a[sum++]=l[lnum++];
a[sum++]=l[lnum++];
if(snum<num2) a[sum++]=s[snum++];
}
for(int i=0;i<num1+num2;i++){
if(i!=num1+num2-1) printf("%05d %d %05d\n",a[i].address,a[i].data,a[i+1].address);
else printf("%05d %d -1\n",a[i].address,a[i].data);
}
}
else{
reverse(l,l+num1);
int lnum=0,snum=0,sum=0;
while(sum<num1+num2){
a[sum++]=s[snum++];
a[sum++]=s[snum++];
if(lnum<num1) a[sum++]=l[lnum++];
}
for(int i=0;i<num1+num2;i++){
if(i!=num1+num2-1) printf("%05d %d %05d\n",a[i].address,a[i].data,a[i+1].address);
else printf("%05d %d -1\n",a[i].address,a[i].data);
}
}
return 0;
}