經典面試題 鍊錶的相交與環問題

2021-09-30 09:21:54 字數 980 閱讀 2333

出處:

1.  給出兩個單向鍊錶的頭指phead1和phead2,判斷這兩個鍊錶是否相交。假設兩個鍊錶均不帶環。

示意圖如下:

如果兩個鍊錶相交於某一節點,那麼在這個節點之後的所有節點都是兩個鍊錶所共有的。那麼也就是說,如果兩個鍊錶相交,那麼最後乙個節點肯定是共有的。先遍歷第乙個鍊錶,記住最後乙個節點,然後遍歷第二個鍊錶,到最後乙個節點時和第乙個鍊錶的最後乙個節點做比較,如果相同,則相交,否則不相交。時間複雜度為o( len1 + len2),因為只需要乙個額外指標儲存最後乙個節點,空間複雜度為o(1)。

2. 給出兩個單向鍊錶的頭指phead1和phead2,判斷這兩個鍊錶是否相交,若相交返回第乙個相交的節點。假設兩個鍊錶均不帶環。

對第乙個鍊錶遍歷,計算長度len1,同時儲存最後乙個節點的位址。

對第二個鍊錶遍歷,計算長度len2,同時檢查是否和第乙個鍊錶的最後乙個節點相同,若不相同,不相交,結束。

假設len1大於len2,那麼將第乙個鍊錶先遍歷len1-len2個節點,然後同時對兩個鍊錶開始向後遍歷,這樣兩個鍊錶當前節點到第乙個相交節點的距離就相等了。那麼兩個鍊錶每向後一步就判斷下乙個節點是不是相同,如果相同就返回該節點。

示意圖如下:

3.  給出乙個單向鍊錶的頭指標phead,判斷鍊錶中是否有環。

示意圖如下:

鍊錶中有環,其實也就是自相交。我們用兩個指標p1和p2從頭開始遍歷鍊錶,p1每次前進乙個節點,p2每次前進兩個結點,若存在環,則p1和p2肯定會在環中相遇,若不存在,則p1和p2能正常的到達最後乙個節點(實際上是到達null)。

4.  給出乙個單向鍊錶的頭指標phead,判斷鍊錶中是否有環,若存在,則求出進入環中的第乙個節點。

示意圖如下:

紅色虛線框中的節點為待求節點。

首先判斷是否存在環,若不存在結束。

在環中的乙個節點處斷開(當然最後要記得恢復),這樣就形成了兩個相交的單鏈表,求進入環中的第乙個節點也就轉換成了求兩個單鏈表相交的第乙個節點。

如圖所示:

經典面試題 鍊錶的相交與環問題

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!1 給出兩個單向鍊錶的頭指標phead1和phead2,判斷這兩個鍊錶是否相交。假設兩個鍊錶均不帶環。示意圖如下 如果兩個鍊錶相交於某一節點,那麼在這個相交節點之後的所有節點都是兩個鍊錶所共有的。也就是說,如果兩個鍊錶相交,那麼最後乙個節點肯定是共...

鍊錶的相交與環存在問題

如果兩個鍊錶相交於某一節點,那麼在這個相交節點之後的所有節點都是兩個鍊錶所共有的。也就是說,如果兩個鍊錶相交,那麼最後乙個節點肯定是共有的。先遍歷第乙個鍊錶,記住最後乙個節點,然後遍歷第二個鍊錶,到最後乙個節點時和第乙個鍊錶的最後乙個節點做比較,如果相同,則相交,否則不相交。時間複雜度為o len1...

面試題 判斷鍊錶是否相交

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