輸入兩個鍊錶,找出它們的第乙個公共節點。如下面的兩個鍊錶:
在節點 c1 開始相交。
示例 1:
輸入:intersectval =
8, lista =[4
,1,8
,4,5
], listb =[5
,0,1
,8,4
,5], skipa =
2, skipb =
3輸出:reference of the node with value =
8輸入解釋:相交節點的值為 8 (注意,如果兩個列表相交則不能為 0)。從各自的表頭開始算起,鍊錶 a 為 [4,
1,8,
4,5],鍊錶 b 為 [5,
0,1,
8,4,
5]。在 a 中,相交節點前有 2 個節點;在 b 中,相交節點前有 3 個節點。
示例 2:
輸入:intersectval =
2, lista =[0
,9,1
,2,4
], listb =[3
,2,4
], skipa =
3, skipb =
1輸出:reference of the node with value =
2輸入解釋:相交節點的值為 2 (注意,如果兩個列表相交則不能為 0)。從各自的表頭開始算起,鍊錶 a 為 [0,
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。
注意:
我們使用兩個指標node1,node2分別指向兩個鍊錶heada, headb的頭結點,然後同時分別逐結點遍歷,當nodel到達鍊錶heada的末尾時,重新定位到鍊錶headb的頭結點;當node2到達鍊錶headb的末尾時,重新定位到鍊錶heada的頭結點。
這樣,當它們相遇時,所指向的結點就是第乙個公共結點。因為這時兩個指標走過的節點數都是相同的。
這兩個指標行為就是《你的名字》裡的劇情:
你變成我,走過我走過的路。
我變成你,走過你走過的路。
然後我們便相遇了.
.
public listnode getintersectionnode
(listnode heada, listnode headb)
return node1;
}
注意:**中的迴圈並不會出現死迴圈,因為當兩個指標走完兩條鍊錶時(兩條鍊錶的長度之和是不變的,他們一定會同時走完),他們就會同時指向null,這時會結束迴圈。提交結果:
劍指offer 合併兩個鍊錶
輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。新建乙個節點作為head,依次遍歷兩個陣列 時間複雜度 o n 空間複雜度 o 1 coding utf 8 class listnode def init self,x self.val x self.ne...
劍指Offer 合併兩個排序鍊錶
題目 輸入兩個遞增排序的鍊錶,合併兩個鍊錶並使新鍊錶依然是有序的 鍊錶定義如下 typedef struct listnode linklist 例子如下 首先考慮輸入特殊情況。我們假設輸入鍊錶如果不為空的話必然有序,也就是說不用判斷其有序性。當輸入鍊錶都為空指標,此時返回的鍊錶也需要為空指標。如果...
劍指offer 合併兩個有序鍊錶
依次比較兩個鍊錶的首結點,取較小的的結點放到第三個鍊錶尾,同時移動較小節點所在鍊錶的指標指向下乙個節點。步驟一結果會有乙個鍊錶先遍歷結束 第三個鍊錶尾結點指向剩餘未遍歷結束的鍊錶 返回第三個鍊錶首結點 struct listnode class solution else merlist merli...