题目描述
输入两个链表,找出它们的第一个公共结点。
解答:
找出2个链表的长度,然后让长的先走两个链表的长度差,然后再一起走
(因为2个链表用公共的尾部)
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
if (!pHead1 || !pHead2)return NULL;
ListNode * node1 = pHead1;
ListNode * node2 = pHead2;
int p1_len = 0, p2_len = 0;
while (node1)
{
node1 = node1->next;
p1_len++;
}
while (node2)
{
node2 = node2->next;
p2_len++;
}
node1 = pHead1;
node2 = pHead2;
for (int i = abs(p1_len - p2_len);i > 0;--i)
{
if (p1_len > p2_len)
{
node1 = node1->next;
}
else if (p1_len < p2_len)
{
node2 = node2->next;
}
}
while (node1 != node2)
{
node1 = node1->next;
node2 = node2->next;
}
return node1;
}
};