今日你如約而至了嗎?每天堅持,默默互相監督,希望秋招收到滿意的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 兩個鍊錶的第乙個公共節點
題目延伸 程式設計之美中的求兩個節點是否相交 將兩個節點串在一起,若有節點,串在一起的節點就會出現環,利用一二不長不等,兩個節點在環中必然相遇。本題描述 輸入兩個鍊錶,找出它們的第乙個公共結點。分析 乙個簡單的方法是 首先遍歷兩個鍊錶得到它們的長度,就能知道哪個鍊錶比較長,以及長的鍊錶比短的鍊錶多幾...