leetcode160 相交鍊錶 鍊錶

2022-09-11 19:36:09 字數 2139 閱讀 2897

給你兩個單鏈表的頭節點 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 時間複雜度,且僅...