题目
题目大意:提供两个单词的链表,其中部分单词可能使用了同一个‘Address’,如果存在这种情况则输出第一个共同的‘Address’,反之则输出‘-1’
思路
本题柳神所使用的方法及题目所提到的方法均使用了链表。
这里提供一种使用hashmap模拟链表的思路:
1.使用map<int,int>用于建立字母地址与对应的下一地址之间的关系;
2.使用map<int,bool>用于存储其中一个单词的‘Address’。
完整代码
#include<iostream>
#include<map>
using namespace std;
int N,st1,st2;
int sam = -1;
int main()
{
map<int,int> FindNext;
map<int,bool> InList;
bool flag = true;
scanf("%d%d%d",&st1,&st2,&N);
for(int i = 0;i < N;i++)
{
char letter;
int st,ed;
scanf("%d %c %d",&st,&letter,&ed);
FindNext[st] = ed;
}
while(st1 != -1)
{
InList[st1] = true;
st1 = FindNext[st1];
}
while(st2 != -1)
{
if(InList[st2])
{
flag = false;
printf("%05d",st2);
break;
}
st2 = FindNext[st2];
}
if(flag)printf("-1");
return 0;
}