思路
- 對於兩個鏈表相交於一節點,則在這個節點之後的所有結點都是兩個鏈表所共有的
- 兩個鏈表的最後一個點的數據肯定是相同的
- 求出兩個鏈表的長度,相減結果爲K
- 利用雙指針,長的鏈表的先走K個點,然後取循環判斷兩個鏈表最後一個點是否相同。
直接上代碼:
public class LinkListCross{
public static int Length(ListNode list){ //求兩個鏈表的長度
int count = 0;
while(list != null){
list = list.next;
count++;
}
return count;
}
public static ListNode Point(ListNode list1,ListNode list2){
int len1 = Length(list1);
int len2 = Length(list2);
ListNode longL = list1;
ListNode shortL = list2;
int diff = len1 -len2;
if(len2 > len1){
longL = list2;
shortL = list1;
diff = len2 -len1;
}
// 先走diff步
while(diff-- != 0){
longL = longL.next;
}
// 判斷相交
while(true){
if(longL == shortL){
return longL;
}
longL = longL.next;
shortL = shortL.next;
}
}