题解 | #两个链表的第一个公共结点#
两个链表的第一个公共结点
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;
}
};

查看29道真题和解析