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步。如存在環,則兩者相遇 如不存...