劍指offer兩個鍊錶的第乙個公共結點

2021-10-06 14:04:06 字數 1201 閱讀 6718

今日你如約而至了嗎?每天堅持,默默互相監督,希望秋招收到滿意的offer。上題:

題目描述

輸入兩個鍊錶,找出它們的第乙個公共結點。(注意因為傳入資料是鍊錶,所以錯誤測試資料的提示是用其他方式顯示的,保證傳入資料是正確的)

分析:找公共結點,我們首先要明白公共結點是什麼意思?公共結點指從這個結點開始,兩個鍊錶的後面結點都相同,其實相當於y,兩個鍊錶最後走在了一起。方法有暴力破解法,還有首尾相接法(很巧妙的);

方法一:暴力破解法

因為題目已經限定這兩個鍊錶一定存在結點,所以暴力破解法是可行的。

步驟: 1、將鍊錶1作為外迴圈,讀取鍊錶1的第乙個數;

2、將鍊錶2賦給中間鍊錶,作為內迴圈,讀取中間鍊錶的數;

3、不斷迴圈內迴圈,知道中間鍊錶為null;

4、將鍊錶2重新賦值給中間鍊錶,主要是鍊錶自己不會回到頭結點;

5、將外迴圈向後移動一位,重複步驟3-5,直到結束。

**:/*

public class listnode

}*/public class solution

temp2=temp2.next;

}temp2=phead2; //回到鍊錶2的頭結點;

phead1=phead1.next;

}return null;

}}牛客運行通過

執行記憶體:9660kb

時間複雜度為o(m*n);

方法二:首尾相接法

舉個例子:

phead1=1-2-3-5-null

phead2=4-3-5-null

p1=1-2-3-5-null-4-3-5-null

p2=4-3-5-null-1-2-3-5-null

這樣就省去了求每個鍊錶長度的麻煩。

**:/*

public class listnode

}*/public class solution

}return temp1;

}}牛客運行通過

執行記憶體:9592kb

時間複雜度o(m+n)

第二種方法還是很巧妙的,但是會使用這種方法建立在對鍊錶公共結點的正確理解上。

當然還有很多辦法,例如先求出兩個鍊錶的長度,然後像快慢指標一樣,長的鍊錶先走,在一起走。這裡不再**表示出,可以去牛客上看題解。

歡迎各位互相交流哦~~

劍指offer 兩個鍊錶第乙個公共結點

題目描述 輸入兩個鍊錶,找出它們的第乙個公共結點。解題思路 用兩重迴圈,對第乙個鍊錶的每乙個結點都進行第二個鍊錶所有結點的遍歷,若發現結點相等,則將結點返回 public listnode findfirstcommonnode listnode phead1,listnode phead2 phe...

劍指offer 兩個鍊錶的第乙個公共結點(鍊錶)

輸入兩個鍊錶,找出它們的第乙個公共結點。公共節點指的是節點的指標相同 節點本身相同 而不是節點的內容相同。如果考慮暴力的方法,對於鍊錶1的每個元素,去遍歷鍊錶2,找出第乙個公共節點,這樣時間複雜度為o mn 計算開銷大 m,n分別為兩個鍊錶的長度 考慮具有公共節點的鍊錶的特徵 如果兩個鍊錶有公共節點...

劍指offer 兩個鍊錶的第乙個公共節點

題目延伸 程式設計之美中的求兩個節點是否相交 將兩個節點串在一起,若有節點,串在一起的節點就會出現環,利用一二不長不等,兩個節點在環中必然相遇。本題描述 輸入兩個鍊錶,找出它們的第乙個公共結點。分析 乙個簡單的方法是 首先遍歷兩個鍊錶得到它們的長度,就能知道哪個鍊錶比較長,以及長的鍊錶比短的鍊錶多幾...