1. 程式人生 > >pat甲級 1032 Sharing

pat甲級 1032 Sharing

生僻詞彙:suffix 字尾

題意:給出兩條連結串列的首地址以及一共有多少個結點,然後給出每個結點的地址,資料,下一個結點的地址,求兩個連結串列的首個共同結點的地址。如果不存在這個結點,就輸出-1。

思路:先迴圈遍歷第一個連結串列,把遍歷到的連結串列結點都標記為1;

          遍歷第二個連結串列,如果標記為1就說明這個結點第一個連結串列已經遍歷過了,就輸出然後跳出迴圈。

         迴圈完第二個連結串列都找不到,輸出-1.

注意點:使用%05格式輸出地址,高位補0;

              使用map會超時,應使用unordered_map;

    scanf使用%c格式時是可以讀入空格的,因此在輸入地址,資料,下一個結點的地址時,格式不能寫成%d%c%d,必須在中間加空格。

AC程式碼:

#include<iostream> 
#include<cstdio>
#include<vector>
#include<unordered_map>
using
namespace std; struct node{ int s; char a; int next; int w;//是否讀過的標記 }; int main(){ unordered_map<int,node>mapp; int start1,start2,n; cin>>start1>>start2>>n; node x; while(n--){ cin>>x.s>>x.a>>x.next; x.w=0;//將標記賦值為0
mapp[x.s]=x; } int flag=0; int y=start1; while(y!=-1){ mapp[y].w=1; y=mapp[y].next; } y=start2; while(y!=-1){ if(mapp[y].w==1){ flag=1; printf("%05d",y); break; } y=mapp[y].next; } if(!flag)cout<<-1; }