力扣链接:链表相交
要点:对于不同长度的链表,核心问题就是找到交点,交点如何寻找是本题的重中之重。
仔细分析可知,两链表若有交点,也其交点一定是在短的链表的第一个节点到最后一个节点之间,公共节点一定是即在A链表中又在B链表中的,因此我们需要将长节点的遍历指针移动到和B链表末尾对其的位置,逐个去寻找才能找到交点。
代码如下:
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
ListNode cura = headA;
ListNode curb = headB;
int numa=0;
int numb=0;
int temp = 0;
while(cura!=null){
numa++;
cura = cura.next;
}
while(curb!=null){
numb++;
curb = curb.next;
}
cura = headA;
curb = headB;
if(numa>numb){
temp = numa - numb;
for(int i = 0;i<temp;i++){
cura = cura.next;
}
}
else{
temp = numb - numa;
for(int i = 0;i<temp;i++){
curb = curb.next;
}
}
while(cura!=curb){
cura = cura.next;
curb = curb.next;
}
return cura;
}
}