提交记录
执行结果:
题目:
解题思路:
假设A前段为x,B前段为y,共同段为z,则:A=x+z,B=y+z;
将链表A尾部接链表B,则:A=A+B=(x+z)+(y+z);
将链表B尾部接链表A,则:B=B+A=(y+z)+(x+z);
即使x与y长度不相同,但前三位(x+z+y)与(y+z+x)长度必然相同。
语言:C++
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
ListNode*p=headA;
ListNode*q=headB;
int coun=0;
while(p!=NULL&&q!=NULL){
if(p==q) return p;
p=p->next;
q=q->next;
if(coun<2&&p==NULL) {
p=headB;
coun++;
}
if(coun<2&&q==NULL){
q=headA;
coun++;
}
}
return NULL;
}
};
细节提升
1.使用判别式
p=(p==NULL?headB:p=p->next);
q=(q==NULL?headA:q=q->next);
整体代码:
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(headA==NULL || headB==NULL) return NULL;
ListNode*p=headA;
ListNode*q=headB;
while(p!=q){
p=(p==NULL?headB:p=p->next);
q=(q==NULL?headA:q=q->next);
}
return p;
}
};