题目描述:
找到word1和word2的公共后缀的起始位置
输入
第一行 地址一adress1(word1的起始地址),地址二(word2的起始地址),正整数(节点总数)。其中节点的地址是5位正整数,NULL由-1表示。
然后是N行,每行描述一个格式的节点:
Address Data Next
其中Address是节点的位置,Data是该节点包含的字母,它是从{a-z,A-Z}中选择的英文字母,Next是下一个节点的位置。
输出
输出公共后缀的起始位置。
解题思路
word1和word2的公共后缀的长度相同,所以从word1和word2长度相同的位置开始比较。先获得word1和word2的长度len1和len2,假设word1较word2长,先找到word1的第len2-len1个节点,是的word1余下长度与word2相同,然后逐一比较word1和word2的各节点的下一个地址是否相等,相同即返回。
代码
#include<stdio.h>
#include<iostream>
#include<string>
#include<vector>
using namespace std;
struct node {
char val;
int next;
bool flag;
}nodes[100000];
int main() {
int chain1, chain2, n;
int adress, next;
char val;
cin >> chain1 >> chain2 >> n;
for (int i = 0; i < n; i++) {
scanf("%d %c %d", &adress, &val, &next);
nodes[adress].val = val;
nodes[adress].next = next;
nodes[adress].flag =false;
}
bool flag = true;
while(chain1!= -1){
nodes[chain1].flag =true;
chain1 = nodes[chain1].next;
}
while(chain2!= -1){
if( nodes[chain2].flag ==true){
flag =false;
printf("%05d", chain2);
break;
}
chain2 = nodes[chain2].next;
}
if(flag)
cout<<"-1"<<endl;
return 0;
}