题目描述
输入两个链表,找出它们的第一个公共结点。
- 解题思路:
书上是两种方法,讨论区有一种超短解法。
我写的是书上的第二种解法,即先遍历两个链表的长度,计算它们的差值d,较长的链表先走d步,然后双指针一起遍历直到找到相同的结点。 - 解题步骤:
同上
【考点】链表
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
int len1 = getLength(pHead1);
int len2 = getLength(pHead2);
int d = len1 > len2 ? len1-len2 : len2-len1;
if(len1 > len2)
{
while(d--)
{
pHead1 = pHead1->next;
}
}
else{
while(d--)
{
pHead2 = pHead2->next;
}
}
while(pHead1 != nullptr || pHead2 != nullptr)
{
if(pHead1->val == pHead2->val)
{
return pHead1;
}
pHead1 = pHead1->next;
pHead2 = pHead2->next;
}
return nullptr;
}
int getLength(ListNode* pHead){
int length = 0;
while(pHead != nullptr)
{
length++;
pHead = pHead->next;
}
return length;
}
};