劍指offer 36 兩個鍊錶的第乙個公共結點

2021-10-09 10:51:01 字數 641 閱讀 7156

題目描述

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

**實現

/*

public class listnode

}*/public

class

solution

return nhead1;

}}

分析

最直接的思路是遍歷一條鍊錶,並將每個結點存在乙個集合中,然後遍歷另一條鍊錶,判斷是否有結點在集合中。

技巧性的方法就是將鍊錶拼接。

對於兩個鍊錶,若長度相同,很顯然都從頭開始遍歷,判斷是否發現相同結點;若長度不同,則不可以用這樣的方法。那麼如何構造兩個長度相同的鍊錶呢?答案就是a+b = b+a。例如,a=1->2->3->4->5,b=0->4->5,此時直接遍歷顯然不行,拼接後得到兩個鍊錶

1->2->3->4->5->0->4->5

0->4->5->1->2->3->4->5

可以發現相同結點為4號結點

而長度相同的鍊錶拼接後也不會增加遍歷的時間,因為最極端的情況是沒有找到相同結點,此時二者均為null,迴圈直接退出。

因此拼接法才是此題的正解,時間複雜度o(m+n),空間複雜度o(1)

劍指offer 36 兩個鍊錶的第乙個公共結點

36.兩個鍊錶的第乙個公共結點 輸入兩個鍊錶,找出它們的第乙個公共結點。兩個指標同時遍歷兩個鍊錶,每個指標遍歷完當前鍊錶繼續遍歷另一鍊錶,當兩個指標相等或者某個指標為空時退出迴圈 定義兩個指標,第一輪讓兩個到達末尾的節點指向另乙個鍊錶的頭部,最後如果相遇則為交點 假定 p1 指向表 a p2 指向表...

劍指offer36 兩個鍊錶的第乙個公共結點

輸入兩個鍊錶,找出它們的第乙個公共結點。方法一 用兩個指標同時從兩個鍊錶的表頭開始走,當走到自己的鍊錶結尾的時候開始從另乙個鍊錶的表頭開始向後走。終止條件就是兩個指標第一次相遇。此時指標位置即為所求。兩個鍊錶的節點和是一定的,所以兩個指標一定可以同時遍歷完兩條鍊錶,即在最後時刻兩個指標一定是重合的 ...

劍指offer36 兩個鍊錶的第乙個公共子節點

輸入兩個鍊錶,找出它們的第乙個公共結點。注意因為傳入資料是鍊錶,所以錯誤測試資料的提示是用其他方式顯示的,保證傳入資料是正確的 因為公共節點之後的資料都是一樣的,所以如果兩個鍊錶不一樣長,如果存在公共尾,那麼長的鍊錶前一段一定是不匹配的 struct listnode class solution ...