問題:尋找兩個單項鍊表的交點。
輸入:兩個帶空頭結點的單向鍊錶= =。好吧回頭看了一下好像這個方法是錯的。。。。。。輸出:如果有相交的節點,輸出節點值;如果沒有,列印「沒有找到相交節點」。
這題原理很簡單,首先是遍歷兩個鍊錶,獲取它們的長度;然後求出它們的長度差(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 第三種思路...