class Solution {
public:
ListNode* FindFirstCommonNode(ListNode* pHead1, ListNode* pHead2) {
ListNode* l1 = pHead1;
ListNode* l2 = pHead2;
while (l1 != l2) {
if (l1 == nullptr)
l1 = pHead2;
else
l1 = l1->next;
if (l2 == nullptr)
l2 = pHead1;
else
l2 = l2->next;
}
return l1;
}
};
原理背下来就好:
跑两次链表,head1跑到头就跑head2(反之亦然),然后判断在哪里相交。
如果相交的地方是链表末尾(nullptr),那么就没有相交,反之就相交。
当然,慢慢优化一下逻辑可以把代码写的很短,就像上面一样。

京公网安备 11010502036488号