拓展双指针的思路(以相交链表问题为例)

该函数不仅能判断是否相交,也能得到两链表的相交点

核心思路在于 => 让两个指针能够同时到达相交点

这里处理同时的思路非常巧妙 => p1先走A再走B,p2先走B再走A,终会相遇

相遇有两种情况 => NULL || 相交点

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        ListNode *p1 = headA, *p2 = headB;
        while(p1 != p2) {
            if(!p1) p1 = headB;
            else p1 = p1->next;

            if(!p2) p2 = headA;
            else p2 = p2->next;
        }
        return p1;
    }
};

你可能感兴趣的:(链表,数据结构)