问题描述:
Write a program to find the node at which the intersection of two singly linked lists begins.
For example, the following two linked lists:
/**
* A: a1 → a2
↘
c1 → c2 → c3
↗
B: b1 → b2 → b3
*/
思路:
计算A的长度:B的长度;
若A==B,直接从头开始比较值,相同返回,不同A/B同时next;
若A!=B,计算差值dif,让长的先next dif个长度,在开始逐个比较两个值。相同返回,不同同时next;
附Java代码,已过Leetcode~
public ListNode getIntersectionNode(ListNode headA, ListNode headB) {
if(headA==null || headB==null)
return null;
int common=0;
int dif = 0;
int flag=0;
ListNode tempA=headA;
ListNode tempB=headB;
//A的长度
while(tempA!=null || tempB!=null){
if(tempA!=null && tempB!=null){
tempA=tempA.next;
tempB=tempB.next;
common++;
}
if(tempA==null && tempB!=null){
flag=1;
tempB=tempB.next;
dif++;
}
if(tempB==null && tempA!=null){
flag=2;
tempA=tempA.next;
dif++;
}
}
tempA=headA;
tempB=headB;
if(flag==1){
while(dif>0){
dif--;
tempB=tempB.next;
}
}else if(flag ==2){
while(dif>0){
dif--;
tempA=tempA.next;
}
}
//进行比较
while(common-->0){
if(tempA.val==tempB.val)
return tempA;
else{
tempA=tempA.next;
tempB=tempB.next;
}
}
return null;
}