微軟等資料結構與演算法面試100題 第七題

2021-06-08 14:45:12 字數 1447 閱讀 9056

第七題

微軟亞院之程式設計判斷倆個鍊錶是否相交

給出倆個單向鍊錶的頭指標,比如h1,h2,判斷這倆個鍊錶是否相交。

為了簡化問題,我們假設倆個鍊錶均不帶環。

問題擴充套件:

1.如果鍊錶可能有環列?

2.如果需要求出倆個鍊錶相交的第乙個節點列?

分析: **:

實現**:

#includeusing namespace std;

struct linknode

;bool check2linklist(linknode * head1, linknode * head2)

} templinknode1 = head2;

templinknode2 = head2;

while(null!=templinknode2->nextlinknode) }

if(boolringlist1&&boolringlist2)

couthead2->value = 10;

i->nextlinknode = j;

i->value = 11;

j->nextlinknode = head1;

j->value = 12;

linknode *head3 = new struct linknode();

linknode *m = new struct linknode();

linknode *n = new struct linknode();

linknode *o = new struct linknode();

linknode *p = new struct linknode();

head3->nextlinknode = m;

head3->value =21;

m->nextlinknode = n;

m->value = 22;

n->nextlinknode = o;

n->value = 23;

o->nextlinknode = p;

o->value = 24;

p->nextlinknode = n;

p->value = 25;

linknode *head4 = new struct linknode();

head4 ->nextlinknode = o;

head4 ->value = 31;

temp = head1;

int maxnum =20;

int tempindex = 0;

while(null != temp&&tempindex < maxnum)

couttemp = temp->nextlinknode;

} couttemp = temp->nextlinknode;

} couttemp = temp->nextlinknode;

} cout<

微軟等資料結構與演算法面試100題 第五題

第五題 查詢最小的k個元素 題目 輸入n個整數,輸出其中最小的k個。例如輸入1,2,3,4,5,6,7和8這8個數字,則最小的4個數字為1,2,3和4。分析 本題目要求計算n個整數的最小的k個,題目沒有直接給出複雜度的要求,因此有很多種解法。比如排序後一次輸出等 很多種解法。如果是要求複雜度為klo...

微軟等資料結構與演算法面試100題 第十題

第十題 翻轉句子中單詞的順序。題目 輸入乙個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變。句子中單詞以空格符隔開。為簡單起見,標點符號和普通字母一樣處理。例如輸入 i am a student.則輸出 student.a am i 分析 可以根據空格符將單詞分開,然後針對每個單詞進行操作,...

微軟等資料結構與演算法面試100題 第十五題

第十五題 題目 輸入一顆二元查詢樹,將該樹轉換為它的映象,即在轉換後的二元查詢樹中,左子樹的結點都大於右子樹的結點。用遞迴和迴圈兩種方法完成樹的映象轉換。分析 題目要求求解乙個二元搜尋樹的映象,用兩種方法實現,遞迴和非遞迴。首先,對於求解乙個二元搜尋樹映象其實就是把樹中的每個節點的左右子樹調換了即可...