給你兩個單鏈表的頭節點 heada 和 headb ,請你找出並返回兩個單鏈表相交的起始節點。如果兩個鍊錶不存在相交節點,返回 null 。
圖示兩個鍊錶在節點 c1 開始相交:
題目資料 保證 整個鏈式結構中不存在環。
注意,函式返回結果後,鍊錶必須 保持其原始結構 。
自定義評測:
評測系統 的輸入如下(你設計的程式 不適用 此輸入):
intersectval - 相交的起始節點的值。如果不存在相交節點,這一值為 0
lista - 第乙個鍊錶
listb - 第二個鍊錶
skipa - 在 lista 中(從頭節點開始)跳到交叉節點的節點數
skipb - 在 listb 中(從頭節點開始)跳到交叉節點的節點數
評測系統將根據這些輸入建立鏈式資料結構,並將兩個頭節點 heada 和 headb 傳遞給你的程式。如果程式能夠正確返回相交節點,那麼你的解決方案將被 視作正確答案 。
示例 1:
輸入:intersectval = 8, lista = [4,1,8,4,5], listb = [5,6,1,8,4,5], skipa = 2, skipb = 3
輸出:intersected at '8'
解釋:相交節點的值為 8 (注意,如果兩個鍊錶相交則不能為 0)。
從各自的表頭開始算起,鍊錶 a 為 [4,1,8,4,5],鍊錶 b 為 [5,6,1,8,4,5]。
在 a 中,相交節點前有 2 個節點;在 b 中,相交節點前有 3 個節點。
示例 2:
輸入:intersectval = 2, lista = [1,9,1,2,4], listb = [3,2,4], skipa = 3, skipb = 1
輸出:intersected at '2'
解釋:相交節點的值為 2 (注意,如果兩個鍊錶相交則不能為 0)。
從各自的表頭開始算起,鍊錶 a 為 [1,9,1,2,4],鍊錶 b 為 [3,2,4]。
在 a 中,相交節點前有 3 個節點;在 b 中,相交節點前有 1 個節點。
示例 3:
輸入:intersectval = 0, lista = [2,6,4], listb = [1,5], skipa = 3, skipb = 2
輸出:null
解釋:從各自的表頭開始算起,鍊錶 a 為 [2,6,4],鍊錶 b 為 [1,5]。
由於這兩個鍊錶不相交,所以 intersectval 必須為 0,而 skipa 和 skipb 可以是任意值。
這兩個鍊錶不相交,因此返回 null 。
lista 中節點數目為 m
listb 中節點數目為 n
1 <= m, n <= 3 * 104
1 <= node.val <= 105
0 <= skipa <= m
0 <= skipb <= n
如果 lista 和 listb 沒有交點,intersectval 為 0
如果 lista 和 listb 有交點,intersectval == lista[skipa] == listb[skipb]
高階:你能否設計乙個時間複雜度 o(m + n) 、僅用 o(1) 記憶體的解決方案?
基本思路就是使用hash表存每個節點,另一條鏈逐一判斷
class solution
temp = headb;
while (temp != nullptr)
temp = temp->next;
}return nullptr;}};
但實際上可以使用雙指標解決
設a鏈長為a。b鏈為b,公共鏈長為c
對於a鏈先遍歷自己再遍歷b鏈
對於b鏈先遍歷自己再遍歷a鏈
如果a,b存在公鏈時,(a-c)+c+(b-c)=(b-c)+c+(a-c)
當遍歷兩個指標相等且不為空時 ,這個指標指向的即為相交點
不存在公鏈時,兩個指標都會最終指向nullptr
class solution
return t1;}};
LeetCode160 相交鍊錶
編寫乙個程式,找到兩個單鏈表相交的起始節點。例如,下面的兩個鍊錶 在節點 c1 開始相交。注意 如果兩個鍊錶沒有交點,返回 null.在返回結果後,兩個鍊錶仍須保持原有的結構。可假定整個鍊錶結構中沒有迴圈。程式盡量滿足 o n 時間複雜度,且僅用 o 1 記憶體。解題思路 1.找到兩個鍊錶長度差n後...
Leetcode160 相交鍊錶
解法一 用乙個集合去判斷 class solution sets listnode tmp1 heada listnode tmp2 headb while tmp1 while tmp2 tmp2 tmp2 next return nullptr 解法二 先遍歷一遍兩個鍊錶得到的長度差n,然後讓長...
LeetCode 160 相交鍊錶
編寫乙個程式,找到兩個單鏈表相交的起始節點。例如,下面的兩個鍊錶 a a1 a2 c1 c2 c3 b b1 b2 b3 在節點 c1 開始相交。注意 如果兩個鍊錶沒有交點,返回 null.在返回結果後,兩個鍊錶仍須保持原有的結構。可假定整個鍊錶結構中沒有迴圈。程式盡量滿足 o n 時間複雜度,且僅...