题目


题目大意:提供两个单词的链表,其中部分单词可能使用了同一个‘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;
}
该文章介绍了一种解决编程问题的方法,涉及两个使用相同Address的单词链表。通过HashMap来模拟链表,存储字母地址及其对应下一条地址的关系,并利用另一个HashMap记录其中一个单词的访问路径。程序遍历两个链表,找到第一个共有的Address并输出,若不存在则输出-1。

被折叠的 条评论
为什么被折叠?



