力扣-160-相交链表

250 阅读1分钟

双指针解法(c++)

规律:设相交部分长为n,链表A长度=a+n;链表B长度为b+n;则可知a+n+b == b+n+a,具体如下

  1. 相交:p1从A的链表头遍历到链表尾与p2从B的链表头遍历到链表尾时并不是同时的,此时若将p1指向headB,p2指向headA,当p1和p2指向同一个位置时,即为第一个交点,
  2. 不相交: 同上,若当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;
    }
};