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),那么就没有相交,反之就相交。
当然,慢慢优化一下逻辑可以把代码写的很短,就像上面一样。