题目描述
链接
给定两个链表首地址,以及各个结点,求两个链表的首个公共结点的地址,没有,则返回-1
关键点
- 用静态链表时注意该怎么写,怎么遍历,按照题意改造结构体,比如这里加了一个flag变量
- 遍历第一个链表标记每个结点为true,然后遍历第二个,遇到第一个flag为true的就是我们找的结点
- 注意scanf的时候
%d%c%d
是不行的,因为会把空格读入,此时!!记住写成原来的输入格式%d %c %d
,也就是加空格,保持一模一样
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+10;
struct Node{
char data;
int next;
bool flag;
}node[maxn];
int main(){
int pa,pb,n;
scanf("%d%d%d",&pa,&pb,&n);
int add, nxt;
char ch;
for(int i=0;i<n;i++){
scanf("%d %c %d",&add, &ch, &nxt);
node[add].data = ch;
node[add].next = nxt;
}
while(pa != -1){
node[pa].flag = true;
pa = node[pa].next;
}
while(pb != -1){
if(node[pb].flag){
printf("%05d
",pb);
return 0;
}
pb = node[pb].next;
}
printf("-1
");
}