思路
- 对于两个链表相交于一节点,则在这个节点之后的所有结点都是两个链表所共有的
- 两个链表的最后一个点的数据肯定是相同的
- 求出两个链表的长度,相减结果为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;
}
}