簡 鍊錶的公共節點

2021-10-24 06:04:13 字數 736 閱讀 6460

輸入兩個鍊錶,找出它們的第乙個公共結點。(注意因為傳入資料是鍊錶,所以錯誤測試資料的提示是用其他方式顯示的,保證傳入資料是正確的)

這道題注意是公共節點,而非相同節點,如果是相同節點我們就直接用hashset做了。當然這道題也是能用hashset做的,只不過有一種不需要輔助空間,時間上依然是o(m+n)的做法。

因為是公共節點,意味著如果在第乙個公共節點重合,那麼後面的鍊錶就合起來了,也就是公共時,兩個鍊錶走過的結點數應該是一致的。當length1==length2時,我們只需要判斷是否節點公共,否則++即可。如果不相等,我們只需要給鍊錶前面加上一段能讓兩個鍊錶長度相等的無關鍊錶段即可(因為公共段相等,所以當第乙個公共節點到達時,肯定1和2都走過了相同的節點數,自然只可能是在無關段後面的1和2段,所以不需要考慮無關段的影響),那麼無關段長度多少合適呢?顯然length1+length2==length2+length1,我們直接把2和1分別連上對方即可,這樣就完成了長度一致,直接判斷與++即可。

這道題有乙個地方要注意,雖然題目說肯定資料正確,但是測試的時候還是出現了沒有公共節點的情況,所以要注意邊界值。

/*

public class listnode

}*/public class solution

if(n2==null)

//這道題不確定val是否重複,直接比較記憶體

if(n1==n2)else

}return n1;

}}

鍊錶中的公共節點

求取兩煉表中的第乙個公共節點。由於鍊錶中的節點都有乙個指向下乙個節點的指標,當某個節點公共時,意味著該公共節點指向的下乙個節點也公共,即第乙個公共節點後的所有節點公共。因此,兩條鍊錶按公共節點重疊後呈現y型。我們可以先計算兩條鍊錶的長度差,該長度差就是長鍊表優先要走的步數,之後兩鍊錶就乙個乙個對應比...

兩個鍊錶的公共節點

輸入兩個鍊錶,找出它們的第乙個公共結點。因為兩個鍊錶的長度可能不一樣,首先遍歷兩個鍊錶求出兩個鍊錶的長度,假設乙個鍊錶的長度為m,另乙個鍊錶的長度為n,得到m和n的差值dif,讓比較長的那個鍊錶先走dif步,然後再同時遍歷兩個鍊錶,直到遇到相同的節點為止。python coding utf 8 cl...

找兩個鍊錶的公共節點

首先考慮兩個鍊錶無環的情況。將鍊錶a的尾節點指向頭節點從而形成環。用快慢指標遍歷鍊錶b,乙個一次移動2單位,另乙個移動1單位。如果不相遇則不存在公共節點。如果相遇,則讓其中乙個指標指向b,兩個指標以1單位 次的速度移動,直到相遇。相遇時指向的節點就是公共節點的起始。最後記得將a的尾節點恢復。如下。其...