#include<stdio.h> #include<stdlib.h> #include<string.h> struct node { char data; int next; bool tag; }Node[100066]; int main() { int add1,add2,n; //连表1首地址, scanf("%d%d%d",&add1,&add2,&n); memset(Node,0,sizeof(Node)); char tmp; int from,to; for(int i=0 ; i<n ; ++i) //先把所有结点存入 { scanf("%d %c %d",&from,&tmp,&to); Node[from].data=tmp; Node[from].next=to; } int p; for(p=add1 ; p!=-1 ; p=Node[p].next) //【思维】从表1首地址出发,到-1,经过的就是表1所有节点 { Node[p].tag=1; } for(p=add2 ; p!=-1 ; p=Node[p].next) //表1到-1走完了,从表2首地址开始,沿着next一直到头 { if(Node[p].tag==1) //中途有碰到和表一一样的节点,就停止,p记录的就是这个相同结点地址 break; } if(p!=-1) //有地址,按5位格式输出 printf("%05d",p); else //没有地址,输出-1 printf("-1"); //system("pause"); return 0; }
时间: 2024-10-06 17:16:16