資料結構之鍊錶相交問題

2021-09-25 15:13:13 字數 1015 閱讀 9393

1.先各自求出鍊錶的長度。

2.讓長的走長度差步。

3.同時走第一次相遇的點就是交點。

下面是**:

public class solution 

return len;

}public listnode getintersectionnode(listnode heada, listnode headb)

for (int i = 0; i < diff; i++)

while (longer != shorter)

return longer;

}}

1.快慢指標(乙個一步,乙個兩步,不能是乙個一步,另乙個n步 可能會一直錯過)

2.如果快的和慢的相遇帶環,如果快的走向null不帶環。

3.求入環點:

1)轉化為相交問題。

2)乙個從起點出發,另乙個從相遇點出發,一定相遇到入環點。

下面是展示**:

public class solution 

fast = fast.next;

if (fast == null)

fast = fast.next;

slow = slow.next;

} while (fast != slow);

// 求相遇點

// 如果快的遇到 null,表示沒有環,直接返回 null

// 相遇點出發 + 起點出發,最終相遇

listnode p = head;

listnode q = slow;

while (p != q)

return p;

}}

複雜鍊錶的複製:

1):簡單複製無法解決(因為是淺拷貝)

2):需要先複製結點,後解決random問題。

3):如果能從老的結點找到新的結點,問題好解決。

結構1)老-新-老-新.....

2)處理random

3)拆開

鍊錶相交問題

1 判斷兩個鍊錶是否相交 假設兩個鍊錶均不帶環 有四種方法 解法1 直觀的想法 判斷第乙個鍊錶的每個節點是否在第二個鍊錶中,這種方法的時間複雜度為o length h1 length h2 解法2 利用計數的方法 對第乙個鍊錶的節點位址進行hash排序,建立hash表,然後針對第二個鍊錶的每個節點的...

鍊錶相交問題

問題描述 給定兩鍊錶的頭結點,判斷兩鍊錶是否存在公共部分 相交 若相交返回相交的第乙個節點。經分析發現該問題可以分成如下兩個子問題進行解決。子問題一 兩無環鏈表是否相交 演算法一 假設list1長度為l1,list2長度為l2,假設公共部分長為m,由l1 l2 m l2 l1 m可知第一路先遍歷li...

程式設計code之鍊錶相交問題

本文 liuxialong的專欄 給定乙個單鏈表,只給出頭指標h 1 如何判斷是否存在環?2 如何知道環的長度?3 如何找出環的連線點在 4 帶環鍊錶的長度是多少?解法 1 對於問題1,使用追趕的方法,設定兩個指標slow fast,從頭指標開始,每次分別前進1步 2步。如存在環,則兩者相遇 如不存...