力扣160. 最浪漫的相交链表

路至尽头,不见君,待到相遇,君亦如我

题目:

编写一个程序,找到两个单链表相交的起始节点。

如下面的两个链表:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FG3Rqb24-1612275121233)(https://secure-static.wolai.com/static/cg7fPf268yzME1VhKUuqJj/image.png)]

解析:

链表A和B相交与否先不论,根据A+B = B + A。那么两指针先走完自己的链表后,再走对方的链表。那么两个链表走过的路程相等。

那么如果相交,可以看作将相交部分去掉,那么两个指针先走完彼此的路,最后携手走上共同的路。(是不是有点浪漫)

代码如下:

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        if(headA == nullptr || headB == nullptr)
            return nullptr;
        ListNode *pa = headA;
        ListNode *pb = headB;
    
        while(pa!=pb) {
            pa = !pa ? headB : pa->next;
            pb = !pb ? headA : pb->next;
        }
        return pa;
    }
};

猜你喜欢

转载自blog.csdn.net/Matcha_/article/details/113575464