劍指offer三十六 兩個鍊錶的第乙個公共結點

2022-08-14 05:54:12 字數 678 閱讀 9215

兩個鍊錶的第乙個公共結點

舉例 1 2 3 4 5

6 4 5

將前面的12給擷取,最後同時遍歷後三個得到4

1 2 3 4 5 nullptr 5 4 6 nullptr

6 4 5 nullptr 1 2 3 4 5 nullptr

當兩者節點相同時結束

可以觀察到4 5 重合時前面的元素個數一樣

數學歸納一般規律 ax bx;x代表相同部分,a、b代表不同部分(假設長度為m、n個)

a(m) x b(m) x

b(n) x a(n) x

可見最後x前的長度均為m+n+x個

特殊情況考慮

情況一123 456 二者沒有公共點 最後找到nullptr p1換成p2

情況二m=n 123 423 在第一次就找到2時公共點 沒問題

情況三 乙個鍊錶為 另乙個為

1 2 3 nullptr nullptr

nullptr 1 2 3 nullptr

綜上我們得出如下結論:

當指向nullptr時切換另乙個鍊錶否則一直在本鍊錶上遍歷

listnode*findfirstcommonnode(listnode*phead1,listnode*phead2) 

return

p1;

}

劍指offer 合併兩個鍊錶

輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,當然我們需要合成後的鍊錶滿足單調不減規則。新建乙個節點作為head,依次遍歷兩個陣列 時間複雜度 o n 空間複雜度 o 1 coding utf 8 class listnode def init self,x self.val x self.ne...

劍指offer 兩個鍊錶的合併

我怕是要丸,鍊錶合併不會寫了!題目 輸入兩個單調遞增的鍊錶,輸出兩個鍊錶合成後的鍊錶,合成後的鍊錶滿足單調遞增。首先遞迴方法 struct listnode listnode reverselist listnode phead first next last return first 非遞迴 ty...

劍指Offer 合併兩個排序鍊錶

題目 輸入兩個遞增排序的鍊錶,合併兩個鍊錶並使新鍊錶依然是有序的 鍊錶定義如下 typedef struct listnode linklist 例子如下 首先考慮輸入特殊情況。我們假設輸入鍊錶如果不為空的話必然有序,也就是說不用判斷其有序性。當輸入鍊錶都為空指標,此時返回的鍊錶也需要為空指標。如果...