判斷兩個鏈表是否交叉,並求出交叉點

來源:互聯網
上載者:User

在前面一篇文章中講了如何判斷一個鏈表中有環,如果有環的話,又如何判斷出環出現在哪裡

http://blog.csdn.net/xie376450483/archive/2010/08/19/5825261.aspx

 

今天要講的和那篇類似,就是給定兩個鏈表,如何來判斷這兩個鏈表相交了

首先應該分兩種情況考慮,第一:這兩個鏈表本身都沒有環。  第二:這兩個鏈表本身都有環

 

首先講都沒有環的情況,如

方法很多,不過我想最簡單的方法是遍曆第一個鏈表,然後遍曆到最後一個節點時候,用一個指標把節點地址記錄下來

然後再來遍曆第二個鏈表,同樣記錄下最後一個鏈表的地址,如果兩個指標的指向一樣,那麼就可以判斷出兩個鏈表相交了

然後再來判斷他們的交點

把第一個鏈表的尾節點指向第二個鏈表的頭結點,這樣就形成了一個6字型的環鏈表,利用我們前面那篇文章講的方法就可以求出相交節點

 

然後說第二種情況

兩個鏈表本身都有環,首先我們應該知道如果一個鏈表有環,一個鏈表沒有環,那麼他們肯定不想交,自己畫畫圖就明白了,不多說

現在判斷出兩個鏈表都有環,那麼怎麼來判斷相交了呢?

方法是遍曆利用前面的方法找到第一個鏈表的環點,然後將環斷開(當然不要忘記了儲存它的下一個節點),然後再來遍曆第二個鏈表,如果發現第二個鏈表從有環變成了無環,那麼他們就是相交的嘛,否則就是不相交的了。

 

在判斷出來兩個有環的鏈表有交點後,然後來找出相交的節點,這時候又分了兩種情況,相交點在環之前還是相交點在環之後,這樣講不嚴謹,應該是對一個鏈表來講相交點是在另一個鏈表的環之前還是之後。

方法如下

首先找到兩個鏈表的環點,利用前面那篇文章的方法,假設兩個鏈表的環點分別是p1,p2 加入p1==p2 說明相交點是在環點之前,

如:

這時候我們可以從環點斷開,同樣記得儲存下一個節點,然後把環點指向其中一個鏈表的表頭,這樣就把問題轉換成前面6字形環形鏈表的相交節點問題

 

如果兩個鏈表的相交情況如呢?

那這樣就很那說哪個是交點了,因為有兩個交點,其實不叫兩個交點,是相對於l1來講交點是l2的環點,相對於l2來講交點是l1的環點

而環點同樣是前面的方法得到的。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.