这种题目属于常用的数据结构,是重点题目,熟能生巧,写的多了,自然就会更加的得心应手。
题目描述如下:
题目大致意思:
有两个单词存储在链表中,链表的每个节点存贮一个字母,要求求出两个链表相交的第一个位置的地址。
大致思路:
这是一道静态链表的题目,因为链表的地址是一个5位数,所以可以用一个大小为99999的结构体数组来表示链表中可能出现的节点。结构体中可以设置一个整型变量flag=-1,在对第一条链表进行遍历时,将flag置为1,表示该节点在第一条链表中出现过;接下来对第二条链表进行遍历,如果碰到了flag为1的节点,表示该节点则为第一个公共节点,如果没有碰到flag为1的节点,则表示该两条节点没有公共节点。
提交结果如下:
提交代码如下:
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
struct Node
{
int next;
int flag=-1;
};
Node node[99999];
int begin1,begin2,n;
cin>>begin1>>begin2>>n;
for(int i=0;i<n;i++)
{
int a,b;
char c;
cin>>a>>c>>b;
node[a].next=b;
}
while(begin1!=-1) //将链表1的所有标志位置为1
{
node[begin1].flag=1;
begin1=node[begin1].next;
}
while(begin2!=-1)
{
if(node[begin2].flag==1)
{
//这里在输出时,有一个需要注意的点,需要使用格式控制进行输出,因为地址是带有前导零的
cout<<setw(5)<<setfill('0')<<begin2<<endl;
return 0;
}
begin2=node[begin2].next;
}
cout<<-1<<endl;
}
本次提交后累计得分为1268。