private
static
class
node
//省略get set
}
public
static node checknodeintersect(node node1, node node2)
int n1num = 0;
int n2num = 0;
int subtract = 0;
node n1 = node1;
node n2 = node2;
int diff = 0;
// 分別得到兩段鍊錶長度 得到最後乙個節點
while (n1.next != null)
while (n2.next != null)
// 如果最後的乙個節點不相同 則返回null
if (n1 != n2)
// 得到兩個鍊錶的差
diff = math.abs(n1num - n2num);
// 比較兩段鍊錶的長度,長的為n1 短的為n2
if (n1num > n2num) else
// 把長的一段移動diff位置 使得與另一段鍊錶相等起始位置
for (int i = 0; i < diff; i++)
// 遍歷到n1 == n2時(比較位址)結束遍歷
while (n1 != n2)
// 返回相交節點
return n1;
}
public static void main(string args)
如何判斷兩個鍊錶是否有交點
首先,兩個鍊錶如果有交點它應該是y型的。分別遍歷兩個鍊錶,如果尾節點位址相同,則有交點 分別遍歷兩個鍊錶,計算兩鍊錶長度,長的為a,短的為b,讓長的鍊錶先走a b步,然後兩個鍊錶儀器走,走到同一位址處為交點。把兩個鍊錶放到兩個陣列中遍歷,位址相同為交點。如何判斷單向鍊錶是否有環 遍歷放到鍊錶中,直到...
判斷兩個鍊錶是否交叉,並求出交叉點
有兩個單向鍊錶,表頭pheader1,pheader2,請寫乙個函式判斷這兩個鍊錶是否有交叉.如果有交叉,給出交叉點.程式不能改變鍊錶的內容,可以使用額外的空間,時間複雜度盡量小,最好給出兩種解.雙重迴圈的解由於時間複雜度高,不算正解 基本思想 如果兩個鍊錶交叉,那麼這兩個鍊錶在交叉點之後的節點是完...
判斷兩個鍊錶是否相交並找出交點
問題描述 乙個比較經典的問題,判斷兩個鍊錶是否相交,如果相交找出他們的交點。思路 1 碰到這個問題,第一印象是採用hash來判斷,將兩個鍊錶的節點進行hash,然後判斷出節點,這種想法當然是可以的。2 當然採用暴力的方法也是可以的,遍歷兩個鍊錶,在遍歷的過程中進行比較,看節點是否相同。3 第三種思路...