如何判斷兩個(gè)鏈表是否相交,假設(shè)兩個(gè)鏈表都沒有環(huán)?
首先,很多同學(xué)會(huì)存在一個(gè)誤區(qū),認(rèn)為兩個(gè)鏈表相交應(yīng)該這樣的。
如果把它用結(jié)點(diǎn)的形式來表示就這樣的。
很顯然,相交的這個(gè)結(jié)點(diǎn)的next指針既指向了這個(gè)這個(gè)結(jié)點(diǎn),又指向了這個(gè)結(jié)點(diǎn),明顯不科學(xué)。
真正相交的鏈表,應(yīng)該是這樣的。
如果兩個(gè)鏈表相交,那么一定有重合的結(jié)點(diǎn),所以可以逐個(gè)判斷第一個(gè)鏈表里面的結(jié)點(diǎn)是否在第二個(gè)鏈表中,這種辦法可行,就是效率太低,放在筆試題中往往時(shí)間復(fù)雜度滿足不了。
我們稍微分析一下就會(huì)發(fā)現(xiàn),相交的兩個(gè)鏈表,他們的最后一個(gè)結(jié)點(diǎn)一定是重合的。
所以只要讓第一個(gè)鏈表的指針指向最后一個(gè)結(jié)點(diǎn),第二個(gè)鏈表的指針也指向最后一個(gè)結(jié)點(diǎn),判斷這兩個(gè)結(jié)點(diǎn)是否相同,就能解決問題。
這個(gè)時(shí)候,往往面試官會(huì)接著問,如何找出相交的那個(gè)結(jié)點(diǎn)。
剛才的方法只適用于判斷是否相交,如果想找出相交的結(jié)點(diǎn),好像不太容易。
我們得換個(gè)方法,既能判斷是否相交,又能找出相交的那個(gè)結(jié)點(diǎn)。
如果兩個(gè)鏈表的長度一樣,只要同時(shí)移動(dòng)指針,最先相等的那個(gè)結(jié)點(diǎn)一定就是相交的結(jié)點(diǎn)。
所以可以先計(jì)算兩個(gè)鏈表的長度差,然后先移動(dòng)一個(gè)指針,保證長度一樣后,再同時(shí)向后走。代碼也沒什么難度,直接附上。
審核編輯:劉清
-
單鏈表
+關(guān)注
關(guān)注
0文章
13瀏覽量
7058 -
數(shù)據(jù)鏈表
+關(guān)注
關(guān)注
0文章
3瀏覽量
2579
原文標(biāo)題:如何判斷兩個(gè)鏈表是否相交?
文章出處:【微信號(hào):學(xué)益得智能硬件,微信公眾號(hào):學(xué)益得智能硬件】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
兩個(gè)沒有耦合關(guān)系的電感串聯(lián)或者并聯(lián)會(huì)發(fā)生什么
數(shù)據(jù)結(jié)構(gòu):判斷鏈表回文結(jié)構(gòu)

multisim 如何疊加兩個(gè)兩個(gè)信號(hào)
Linux內(nèi)核的鏈表操作
如何測(cè)量兩個(gè)光源的相對(duì)強(qiáng)度?

Linux USB總線的兩個(gè)鏈表
移動(dòng)旋轉(zhuǎn)鏈表的每個(gè)節(jié)點(diǎn)
如何使用兩個(gè)LED和Arduino

兩個(gè)LED和兩個(gè)按鈕的使用

C語言入門之鏈表概述
兩個(gè)網(wǎng)絡(luò)IP地址是否在同一個(gè)段中的判斷方法

評(píng)論