双指针解法(c++)
规律:设相交部分长为n,链表A长度=a+n;链表B长度为b+n;则可知a+n+b == b+n+a,具体如下
- 相交:p1从A的链表头遍历到链表尾与p2从B的链表头遍历到链表尾时并不是同时的,此时若将p1指向headB,p2指向headA,当p1和p2指向同一个位置时,即为第一个交点,
- 不相交: 同上,若当p1和p2指向同一个位置时,都是指向链表结尾,返回空
class Solution {
public:
ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
if(headA==NULL||headB==NULL){
return NULL;
}
ListNode *p1=headA,*p2=headB;
while(p1!=p2){
if(p1==NULL){
p1=headB;
}else if(p2==NULL){
p2=headA;
}else{
p1=p1->next;
p2=p2->next;
}
//p1=p1==NULL?headB:p1->next;
//p2=p2==NULL?headA:p2->next;
}
return p1;
}
};