面試題 判斷兩個鍊錶是否相交(可能帶環)

2021-09-30 14:39:59 字數 1022 閱讀 5203

判斷兩個鍊錶是否相交(可能帶環):這個問題我們可以根據是否帶環來分三種情況,情況一:兩個鍊錶都不帶環;   情況二:其中有乙個鍊錶帶環;   情況三:兩個鍊錶都帶環。

下面我用一張來進行更詳細的分類,之後寫**也是按照這種劃分思想。

bool isloop(node* phead)        //判斷乙個鍊錶是否帶環

if(fast != null && fast->_next != null)

return true;

else

return false;

}node* findloopentrance(node* phead) //求環的入口點

} while(1)

return slow;

}node* isintersect_noloop(node* phead1, node* phead2) //判斷兩個不帶環的鍊錶是否相交

pret->_next = phead1;

node* samenode = findloopentrance(phead2);

return samenode;

}node* isintersect_loop(node* phead1, node* phead2) //判斷兩個帶環鍊錶是否相交

pret1->_next = phead1;

node* samenode = findloopentrance(phead2);

return samenode;

} else

while(pcur == ent1);//如果是因為while跳出迴圈的話,說明兩個環不重合,鍊錶不相交

if(pcur == ent2)

return ent2;

else

return null;

} return null;}//

node* isintersect(node* phead1, node* phead2) //判斷兩個鍊錶是否相交

鏈表面試題 判斷兩個鍊錶是否相交

判斷兩個鍊錶是否相交,若相交,求交點。假設鍊錶不帶環 判斷兩個鍊錶是否相交,若相交,求交點。假設鍊錶可能帶環 採用對齊的思想。計算兩個鍊錶的長度 l1 l2,分別用兩個指標 p1 p2 指向兩個鍊錶的頭,然後將較長鍊錶的 p1 假設為 p1 向後移動l2 l1個節點,然後再同時向後移動p1 p2,直...

面試題 判斷鍊錶是否相交

今天看了 july的一篇經典文章 程式設計師程式設計藝術 第九章 閒話鍊錶追趕問題 因為現在一直複習資料結構有關鍊錶的演算法,順便總結下,學習下july大牛的判斷鍊錶是否相交。出處 題目 給出兩個單向鍊錶的頭指標,判斷是否相交。下面是july文章上面的解法 分析 這是來自程式設計之美上的微軟亞院的一...

判斷兩個鍊錶是否相交

思路1 最暴力的辦法,針對鍊錶1的每乙個節點,判斷其是否也在鍊錶2中,複雜度o n m 明顯不是乙個好方法。思路2 給每個節點增加乙個標記量,可以是附在鍊錶中的成員,也可以是另外的乙個結構,例如用乙個陣列來儲存。先遍歷鍊錶1,標記出遍歷過的節點,再遍歷鍊錶2,如果發現某個節點已經被遍歷過,則說明相交...