题意
判断单词的共同后缀,以链表形式给出。
实际上就是判断题目提供的结点所组成的两条链表中有无共用节点。
题目注意点
- 要按%05d的格式补0输出
- 如果按两条链表叠加遍历的方法复杂度为O(nm),最后一个点会运行超时,要改为检测某一地址有无在另一条链表中出现过,时间复杂度为O(n+m)
实现
#include <stdio.h>
#define maxSize 100010
struct Node {
char ch;
int next;
bool flag;
}node[maxSize];
int main() {
int head1, head2, n;
scanf("%d%d%d", &head1, &head2, &n);
int add, next;
char c;
for (int i = 0 ; i < n; i++) {
scanf("%d %c %d", &add, &c, &next);
node[add].ch = c;
node[add].next = next;
}
for (int i = 0; i < maxSize; i++) {
node[i].flag = false;
}
for (int p = head1; p != -1; p = node[p].next) {
node[p].flag = true;
}
for (int p = head2; p != -1; p = node[p].next) {
if (node[p].flag) {
printf("%05d\n", p);
return 0;
}
}
printf("%d\n", -1);
return 0;
}