两个链表的第一个公共节点

剑指 offer 52

关键点

  • 定义两个指针posA和posB分别从两个链表的头部开始移动
  • 当较短的那条链表的指针移动到尾部时,将其指向较长的那条链表的头部
  • 对较长的那条链表上的指针做同样处理
  • 两个指针相遇的node就是他们所指向的第一个公共节点

代码

class Solution {
public:
    ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
        if (!headA || !headB) {return nullptr;}

        ListNode *posA = headA, *posB = headB;

        while (posA || posB) {
            if (!posA) {
                posA = headB;
            }
            
            if (!posB) {
                posB = headA;
            }

            if (posA == posB) {
                return posA;
            }

            posA = posA -> next;
            posB = posB -> next;
        }

        return nullptr;
    }
};
posted @ 2020-12-21 23:02  _一只土拨鼠  阅读(58)  评论(0)    收藏  举报