若是两个相同长度的链表则对比相应位置处的地址则可以得到交集。先求出两个链表的长度,再求出差值,将长的去掉差值个元素再比较相应位置的元素。
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
int len1=0,len2=0;
ListNode*l1=headA,*l2=headB;
if(!headA||!headB)
return null;
while(l1){
l1=l1->next;
len1++;
}
while(l2){
l2=l2->next;
len2++;
}
int gap=len1-len2;
if(gap>0){
while(gap--)
headA=headA->next;
}else{
while(-(gap++)>0)
headB=headB->next;
}
while(headA){
if(headA==headB)
return headA;
headA=headA->next;
headB=headB->next;
}
return NULL;
}
int型的全局变量会初始化为0,局部变量会任意分陪一个。
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode*l1=headA,*l2=headB;
if(!l1||!l2) return NULL;
// if()
while(l1!=l2){
if(!l1)
{
l1=headB;
continue;
}
if(!l2)
{
l2=headA;
continue;
}
l1=l1->next;
l2=l2->next;
}
return l1;
}
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode*l1=headA,*l2=headB;
if(!l1||!l2) return NULL;
// if()
while(l1!=l2){
l1=l1?l1->next:headB;
l2=l2?l2->next:headA;
}
return l1;
}