题解 | 两个链表的第一个公共结点
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
ListNode* curr1 = pHead1;
ListNode* curr2 = pHead2;
int size_1 = 0;
int size_2 = 0;
while (curr1 != nullptr) {
size_1++;
curr1 = curr1->next;
}
while (curr2 != nullptr) {
size_2++;
curr2 = curr2->next;
}
curr1 = pHead1;
curr2 = pHead2;
if (size_1 < size_2) {
for (int i = 0; i < size_2 - size_1; i++) {
curr2 = curr2->next;
}
while (curr2 != nullptr)
{
if (curr1->val == curr2->val) {
return curr1;
} else {
curr1 = curr1->next;
curr2 = curr2->next;
}
}
} else {
for (int i = 0; i < size_1 - size_2; i++) {
curr1 = curr1->next;
}
while (curr1 != nullptr)
{
if (curr1->val == curr2->val) {
return curr2;
} else {
curr1 = curr1->next;
curr2 = curr2->next;
}
}
}
return nullptr;
}
};
找到两个链表的长度,然后预处理两个列表到相同长度然后开始遍历对比就可以#剑指offer#
阿里巴巴灵犀互娱公司福利 650人发布