题解 | #两个链表的第一个公共结点#
两个链表的第一个公共结点
https://www.nowcoder.com/practice/6ab1d9a29e88450685099d45c9e31e46
/* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } 该题仍然考的是双指针的考点,即快慢指针的考点; };*/ class Solution { public: size_t GetLength(ListNode* head) { size_t count = 0; while (head != nullptr) { ++count; head = head->next; } return count; } ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { auto count1 = GetLength(pHead1); auto count2 = GetLength(pHead2); auto OffsetHead = [](ListNode* head, int offset) { for (auto i = 0; i < offset; ++i) head = head->next; return head; }; if (count1 > count2) pHead1 = OffsetHead(pHead1, count1 - count2); else if (count1 < count2) pHead2 = OffsetHead(pHead2, count2 - count1); while (pHead1 != pHead2 && pHead1 != nullptr) { pHead1 = pHead1->next; pHead2 = pHead2->next; } if (pHead1 != nullptr) return pHead1; else return nullptr; } };