1032. Sharing (25)

題目鏈接: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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章