PAT(乙级)2019年秋季考试 7-5 链表合并

mac2022-06-30  121

#include<bits/stdc++.h> using namespace std; int firstL1,firstL2,n,address; int main(){ cin>>firstL1>>firstL2>>n; //如何区分L1和L2 int data[100000],next[100000],list[100000],list1[100000],list2[100000]; for(int i=0;i<n;i++){ cin>>address; cin>>data[address]>>next[address]; } int sumL1 = 0; while(firstL1!=-1){ list1[sumL1++] = firstL1; firstL1 = next[firstL1]; } int sumL2 = 0; while(firstL2!=-1){ list2[sumL2++] = firstL2; firstL2 = next[firstL2]; } if(sumL1<sumL2){//L1短 reverse(list1,list1+sumL1); int L=0,L1=0,L2=0; while(L<sumL1+sumL2){ list[L++] = list2[L2++]; list[L++] = list2[L2++]; if(L1<sumL1) list[L++] = list1[L1++]; } for(int i=0;i<sumL1+sumL2;i++){ if(i!=sumL1+sumL2-1) printf("d %d d\n",list[i],data[list[i]],list[i+1]); else printf("d %d -1\n",list[i],data[list[i]]); } } else if(sumL2<sumL1){//L2短 reverse(list2,list2+sumL2); int L=0,L1=0,L2=0; while(L<sumL1+sumL2){ list[L++] = list1[L1++]; list[L++] = list1[L1++]; if(L2<sumL2) list[L++] = list2[L2++]; } for(int i=0;i<sumL1+sumL2;i++){ if(i!=sumL1+sumL2-1) printf("d %d d\n",list[i],data[list[i]],list[i+1]); else printf("d %d -1\n",list[i],data[list[i]]); } } return 0; }

 

最新回复(0)