PAT 1032 Sharing 陣列 棧實現

2021-10-03 15:36:30 字數 958 閱讀 6198

題解:

這題我們用陣列來儲存每個節點下個節點的位址,陣列索引本身就代表結點位址 需要注意其實我們沒必要儲存每個節點的字元是多少,我們可以直接用位址判斷兩個結點是否相同。

讀入所有節點後,從兩個開頭結點向後遍歷,直至address為-1時停止,每讀乙個數字把這個數字壓入對應單詞的棧中,然後兩個單詞比較時每次pop乙個出來比較(由於使用的是棧,所以就實現了從後往前作比較)

若比較結果為相同,則更新suffix,否則直接break;

**:

#include

#include

#include

#include

#include

using

namespace std;

const

int maxn =

1e5+3;

char dict[maxn]

;int nexts[maxn]

;int

main()

stack<

int> str1,str2;

while

(add1 !=-1

)while

(add2 !=-1

)int len =

min(str1.

size()

,str2.

size()

);int suffix =0;

int tmpvala,tmpvalb;

for(

int i =

0;i < len;i++

)else

break

; str1.

pop();

str2.

pop();

}if(suffix ==0)

printf

("-1");

else

return0;

}

PAT A1032 Sharing(靜態鍊錶)

include include include include include include include include include includeusing namespace std define maxn 100010 struct nodenode maxn int main fo...

1032 Sharing 鍊錶題模板總結

靜態鍊錶,找出兩條鍊錶的首個公共結點。基礎題。最巧妙點在於設乙個int型變數flag,然後2次遍歷 第一次遍歷第一條鍊錶 全部結點的flag改從false改為true 第二次遍歷第二條鍊錶,如果當前結點的flag是true則馬上break跳出for迴圈 千萬別忘了break!當然也可以直接retur...

PAT甲級題解 1032

鍊錶遍歷 實質上是找到第乙個在ab之中都出現的點,因為從這個點開始所有接下來的點都是指向的同乙個東西,剛剛開始的時候沒有仔細觀察把題目想難了 include using namespace std const int maxn 100010 struct node node maxn map cha...