題目:輸入兩個鍊錶,找出它們的第乙個公共結點。
思路一:
1、先求出兩個鍊錶的長度差gap,讓比較長的鍊錶先向前遍歷gap個節點,然後兩個鍊錶同時向前遍歷,直到遇到相同的節點為止。時間複雜度:o(m+n);m和n分別為兩個鍊錶的長度。
/**
* 解法一:求得兩個鍊錶的長度差d,讓較長的鍊錶先走d步,然後兩個鍊錶再一起遍歷,時間複雜度o(m+n)
* @param phead1
* @param phead2
* @return
*/public static listnode findfirstcommonnode(listnode phead1, listnode phead2)
listnode p1=phead1;
listnode p2=phead2;
int p1length=0;
int p2length=0;
while (p1!=null)
while (p2!=null)
if(p1length>p2length)else
while (p1!=null)
return null;
}public static listnode walkstep(listnode phead, int step)
return phead;
}public static void main(string args)
思路二:如下圖;將鍊錶分為兩部分,則兩個鍊錶的長度分別為a+c,b+c;得到a+c+b=b+c+a(即鍊錶a遍歷結束後從鍊錶b開始遍歷,鍊錶b遍歷結束後從鍊錶a開始遍歷,當兩個鍊錶的指標相遇時,就是第乙個公共結點)
劍指offer 兩個鍊錶第乙個公共結點
題目描述 輸入兩個鍊錶,找出它們的第乙個公共結點。解題思路 用兩重迴圈,對第乙個鍊錶的每乙個結點都進行第二個鍊錶所有結點的遍歷,若發現結點相等,則將結點返回 public listnode findfirstcommonnode listnode phead1,listnode phead2 phe...
劍指offer 兩個鍊錶的第乙個公共結點(鍊錶)
輸入兩個鍊錶,找出它們的第乙個公共結點。公共節點指的是節點的指標相同 節點本身相同 而不是節點的內容相同。如果考慮暴力的方法,對於鍊錶1的每個元素,去遍歷鍊錶2,找出第乙個公共節點,這樣時間複雜度為o mn 計算開銷大 m,n分別為兩個鍊錶的長度 考慮具有公共節點的鍊錶的特徵 如果兩個鍊錶有公共節點...
劍指offer 兩個鍊錶的第乙個公共節點
題目延伸 程式設計之美中的求兩個節點是否相交 將兩個節點串在一起,若有節點,串在一起的節點就會出現環,利用一二不長不等,兩個節點在環中必然相遇。本題描述 輸入兩個鍊錶,找出它們的第乙個公共結點。分析 乙個簡單的方法是 首先遍歷兩個鍊錶得到它們的長度,就能知道哪個鍊錶比較長,以及長的鍊錶比短的鍊錶多幾...