这道题的思想就是先要让两个指针移动到两个链表后面的元素数量相同,所以要先计算链表长度,计算链表的长度差,然后让curA移动到,和curB 末尾对齐的位置,此时我们就可以比较curA和curB是否相同,如果不相同,同时向后移动curA和curB,如果遇到curA == curB,则找到交点。
struct ListNode *getIntersectionNode(struct ListNode *headA, struct ListNode *headB) {
struct ListNode *l = NULL,* s = NULL;
int lenA=0,lenB=0,gap=0;
//get the length
s=headA;
while(s){
lenA++;
s=s->next;
}
s=headB;
while(s){
lenB++;
s=s->next;
}
if(lenA>lenB){
l = headA, s = headB;
gap=lenA-lenB;
}
else{
l = headB, s = headA;
gap = lenB - lenA;
}
while(gap--){
l=l->next;
}
while(l){
if(l==s){
return l;
}
l=l->next;
s=s->next;
}
return NULL;
}
否则循环退出返回空指针。