/*************************
题意:
常见的一道面试题,求2个链表的相交点
/************************
求解思路和注意点:
建立2个栈,分别存入
然后依次逆向取出,如果不相等说明发生的分裂
注意点:
1.要比较的是节点号相等,而不是里面字符相等!
也就是说字符是没有用的
2.涉及%c时,一定要留意getchar的使用。
************************/
/***********************
笔记:
看到N大于10的5次方时,请用scanf和printf!
*********************/
#include<iostream>
#include<stdio.h>
#include<string>
#include<vector>
#include<queue>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
#include<stack>
using namespace std;
#define M 100001
#define INF 0x7fffffff
int Next[M];
char data[M];
int main(){
int s1,s2,n,i,j;
char c;
int s,e;
scanf("%d%d%d",&s1,&s2,&n);
while(n--){
scanf("%d",&s);
getchar();
scanf("%c%d",&c,&e);
Next[s]=e;
data[s]=c;
}
int p=s1;
stack<int> sta1,sta2;
while(p!=-1){
sta1.push(p);
p=Next[p];
}
p=s2;
while(p!=-1){
sta2.push(p);
p=Next[p];
}
int p1,p2;
int ans=-1;
while(!sta1.empty() && !sta2.empty()){
p1=sta1.top();sta1.pop();
p2=sta2.top();sta2.pop();
if(p1==p2)
ans=p1;
else break;
}
if(ans!=-1)
printf("%05d\n",ans);
else cout<<"-1"<<endl;
return 0;
}
PAT 1032. Sharing (25) 链表和栈的运用, 字符的读取
最新推荐文章于 2021-12-31 08:51:14 发布