演算法 尋找兩個單項鍊表的交點

2021-07-10 04:46:59 字數 1453 閱讀 4226

問題:尋找兩個單項鍊表的交點。

輸入:兩個帶空頭結點的單向鍊錶

輸出:如果有相交的節點,輸出節點值;如果沒有,列印「沒有找到相交節點」。

= =。好吧回頭看了一下好像這個方法是錯的。。。。。。

這題原理很簡單,首先是遍歷兩個鍊錶,獲取它們的長度;然後求出它們的長度差(difference),讓長的乙個鍊錶先前進difference的距離,也就是說此時兩個鍊錶剩下的元素值個數相等。接著兩個鍊錶都一步一步前進,如果發現某處有相同節點,則這個就是相交節點,反之兩個節點分別前進到末端,返回null。

1.首先這是乙個定義的節點。

class node

public

node(t data, nodenext)

}

2.然後這裡是我們主要的查詢演算法。

//查詢兩個單向鍊錶的相交節點

public

static node findthecrossnode(node lhs, node rhs)

//計算鍊錶二長度

while (trhs.next != null)

//計算兩個鍊錶的長度差

int difference = math.abs(len_lhs - len_rhs);

//先讓長的乙個鍊錶走步長為difference的距離

//然後開始兩個鍊錶同步向前,如果有相交節點則會找到相同節點

//否則兩個鍊錶都到最後null

if(len_lhs > len_rhs)

else

while(lhs != rhs)

return lhs;

}

3.然後通過main函式進行了測試,驗證成功哈哈哈哈哈哈哈。在例子特地設定了相交節點值為2。

public

static

void

main(string args)

//構建鍊錶二, 10->9->8->2->3->4

lastnode = list2;

for (int i = 10; i > 7; i--)

lastnode.next = cross;

cross = findthecrossnode(list1, list2);

if (cross != null)

system.out.println("相交節點值為: " + cross.data);

else

system.out.println("沒有相交節點");

}

4.輸出結果如下

node1 = -1 node2 = 10

node1 = 0 node2 = 9

node1 = 1 node2 = 8

相交節點值為: 2

Java實現兩個有序的單項鍊表的合併

無意中看到一道題,如下 現有兩個有序 公升序 的單向鍊錶,請編寫程式將這兩個鍊錶合併成乙個,並確保合併後的鍊錶也是公升序的 單向公升序鍊錶定義 public class listnode 請在下面的 框架基礎上編寫 public class solution 現有兩個有序 公升序 的單向鍊錶,請編寫...

如何獲取兩個單鏈表交點

之前的一篇部落格 如何判斷兩條單鏈表是否有交點 只說了如何判斷是否有交點,但並沒有提及如何得到交點。設定陣列分別儲存兩條鍊錶所有節點的位址,然後一 一比較?可行是可行,不過空間時間複雜度太高,不建議使用。那有沒有更高效的方法呢?方法1從相交鍊錶的特點來切入分析,看看下面這張圖。一般來說,相交鍊錶會自...

判斷兩個單鏈表是否有交點

問題描述 乙個比較經典的問題,判斷兩個鍊錶是否相交,如果相交找出他們的交點。思路 1 碰到這個問題,第一印象是採用hash來判斷,將兩個鍊錶的節點進行hash,然後判斷出節點,這種想法當然是可以的。2 當然採用暴力的方法也是可以的,遍歷兩個鍊錶,在遍歷的過程中進行比較,看節點是否相同。3 第三種思路...