题目概述与分析:
类似字典树,找出两个string的共同后缀的首个位置。
采用链表的方式,它这里只需考虑第一个重叠的位置即可,通过记录cnt即可完成判断。
//相同后缀的共同起点
//这个要求比较低,找第一个共同的节点即可
#include<bits/stdc++.h>
using namespace std;
struct node
{
char data;
int next;
int cnt = 0;
}nodelist[100010];
int main()
{
int s1, s2;
int n;
cin >> s1 >> s2 >> n;
int a;
char b;
int c;
for(int i = 0; i < n; i++)
{
cin >> a >> b >> c;
nodelist[a].data = b;
nodelist[a].next = c;
}
while(s1 != -1)
{
nodelist[s1].cnt ++;
s1 = nodelist[s1].next;
}
while(s2 != -1)
{
if(nodelist[s2].cnt == 1)
{
printf("%05d\n", s2);
return 0;
}
s2 = nodelist[s2].next;
}
cout << "-1" << endl;
return 0;
}
总结:
链表简单遍历。