題目鏈接:https://www.patest.cn/contests/pat-a-practise/1032
題目大意:找出兩個鏈表相匯處的結點
解題思路:
- 先遍歷第一個鏈表,將其中所有節點標記爲已訪問
- 再遍歷第二個鏈表,在遍歷過程中找到的第一個已訪問的結點即爲所求
- 注意:想要通過判斷next域中出現兩次的結點是不可行的,因爲測試用例中有些輸入重複出現了多次來防止這種”小聰明”的方法
代碼如下:
#include <iostream>
#include <cstdio>
using namespace std;
int ne[100001]={0};
int main(){
int p1,p2,n;
scanf("%d%d%d",&p1,&p2,&n);
int adr,nxt;
char data;
for(int i=0;i<n;i++){
scanf("%d %c %d",&adr,&data,&nxt);
ne[adr]=nxt;
}
int i=p1,j=p2,flag[100001]={0};
if(p1==p2){
printf("%05d\n",j);
return 0;
}
while(i!=-1){
flag[i]=1;
i=ne[i];
}
while(j!=-1){
if(flag[j]==1){
printf("%05d\n",j);
return 0;
}
j=ne[j];
}
cout<<"-1"<<endl;
return 0;
}