链表合并与反转,输入两个链表,将最短的链表反转后将两链表合并
具体可以看pat网站查看题目要求。AC解答如下:
#include总结#include #include using namespace std; struct node{ int id; int data; int next; }a[100010]; int main(){ int first1,first2,n; int id,next,data; scanf("%d %d %d",&first1,&first2,&n); vector v1,v2; for(int i=0;i scanf("%d %d %d",&id,&data,&next); a[id].id=id; a[id].data=data; a[id].next=next; } for(int i=first1;i!=-1;i=a[i].next)v1.push_back(a[i]); for(int i=first2;i!=-1;i=a[i].next)v2.push_back(a[i]); if(v1.size() ans; reverse(v2.begin(),v2.end());//反转最小部分的链表 int num1=0,num2=0; int len=v1.size()+v2.size();//可能输入会有垃圾数据,所以去有效值进行输出 for(int i=0;i if(num2>=v2.size()||i%3!=2)ans.push_back(v1[num1++]); else ans.push_back(v2[num2++]); } for(int i=0;i if(i!=ans.size()-1)printf("%05d %d %05dn",ans[i].id,ans[i].data,ans[i+1].id); else printf("%05d %d -1n",ans[i].id,ans[i].data); } return 0; }
关于pat甲级链表部分的题目,难度相对来说较小,用静态链表或者说最好要用静态链表即可解决。最难即反转链表,可用排序解决~



