PAT A1032 Sharing (25分)
阿新 • • 發佈:2020-09-01
將所有的節點存在node陣列中,並且將flag設定為false,在遍歷第一個連結串列時,將此連結串列的節點的flag設定為true,在遍歷第二個連結串列時查詢節點的flag值,若發現flag為true,這此節點即為要找的共同字尾的起點,在遍歷第一個連結串列的時候,已經將node中屬於第一個連結串列的節點標記出來,當第二個節點訪問到true節點的時,表明訪問到了既屬於第一個連結串列的節點有屬於第二個連結串列的節點,很容易理解,兩個連結串列的初次交匯點即為共同字尾的起點。
注意:題目要求的地址是位數,在最終輸出的時候可能位數不齊,則要用0補齊,這個容易疏忽*
#include<cstdio> using namespace std; const int N = 100010; struct Node{ char letter; int next; }node[N]; bool isvis[N]; int main(){ int w1,w2,n; scanf("%d %d %d",&w1,&w2,&n); int tempadd,tempnext; char templetter; bool flag = false; int common; for(int i = 0;i<n;i++){ scanf("%d %c %d",&tempadd,&templetter,&tempnext); node[tempadd].letter = templetter; node[tempadd].next = tempnext; } while(w1!=-1){ isvis[w1] = true; w1 = node[w1].next; } while(w2!=-1){ if(isvis[w2]==true){ common = w2; flag = true; break; }else{ isvis[w2] = true; w2 = node[w2].next; } } if(flag==true) printf("%05d",common); else printf("-1"); return 0; }