判斷兩個鍊錶是否存在交點 並求出位置

2021-07-29 00:05:18 字數 847 閱讀 7132

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 第三種思路...