题目分析
思路:建立链表,这里使用数组。e [ ] 表示当前的数值,ne[ ]表示next指针。
求单词的公共后缀,就是求两个链表从头结点开始第一个公共的结点。
先遍历第一个链表,把属于它的结点打上标记,这里用bool数组表示。
然后遍历第二个链表,如果发现其中的结点的标记为true,则输出该结点的地址。
ac代码
#include<bits/stdc++.h>
using namespace std;
const int N =100010;
bool st[N]; //用于打标记
char e[N]; //表示链表当前结点的数值
int ne[N],h1,h2,n; //ne数组表示next指针
int main(){
cin>> h1>>h2>>n;
while(n--){
int address;
char data;
int next;
cin>>address>>data>>next;
e[address] =data,ne[address]=next;
}
//遍历第一个链表
for(int i=h1;i!=-1;i=ne[i])
st[i]=true; //打上标记
//遍历第二个链表
for(int i=h2;i!= -1;i=ne[i]){
if(st[i]){
printf("%05d",i);
return 0;
}
}
cout<<-1<<endl;
}