两个链表的第一个公共节点
剑指 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;
}
};

浙公网安备 33010602011771号