这道题也折磨了好久, 崩溃T_T一开始用的静态链表,二重循环把word1串起来,同样方法串word2,遇到串过的地方就找到了。最后一组大数据超时了。第二次用的链表,最后一组居然内!存!超!过!了!!最后以空间换的时间,反正地址最多十
#include <stdio.h>
typedef struct WordNode {
char data;
int NextA;
}WordNode;
WordNode Word[100000];
int main()
{
int beginAdd1, beginAdd2, N, i, Add, len1 = 0, len2 = 0;
scanf("%d %d %d", &beginAdd1, &beginAdd2, &N);
while (N--) {
scanf("%d ", &Add);
scanf("%c %d", &Word[Add].data, &Word[Add].NextA);
}
Add = beginAdd1;
while (Add != -1) {
Add = Word[Add].NextA;
len1++;
}
Add = beginAdd2;
while (Add != -1) {
Add = Word[Add].NextA;
len2++;
}
if (len1 > len2)
while (len1 != len2) {
beginAdd1 = Word[beginAdd1].NextA;
len1--;
}
else
while (len1 != len2) {
beginAdd2 = Word[beginAdd2].NextA;
len2--;
}
while (beginAdd1 != beginAdd2) {
beginAdd1 = Word[beginAdd1].NextA;
beginAdd2 = Word[beginAdd2].NextA;
}
if (beginAdd1 != -1)
printf("%05d",beginAdd1);
else printf("-1");
return 0;
}
万个。
有一个点要注意,输入ADD时%d必须要加空格,不然会被当作char类型读入!