[算法题]两个链表的第一个公共结点
题目链接: 两个链表的第一个公共结点
图示:
两个链表如果长度一致, 那么两人同时一人走一步, 如果存在公共结点, 迟早会相遇, 但是如果长度不一致单存在公共结点, 两人同时一人走一步不会相遇, 此时定义两个变量, node1 和 node2, 这两个变量分别从 x1 和 x2 开始走, 当其走完原本的路径后又重新走对方走的路径, 这样存在公共结点两个变量迟早会相遇, 不存在公共结点的话两个结点也会走到空并相遇返回空, 题解代码如下:
class Solution
{
public:ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { ListNode* node1 = pHead1;ListNode* node2 = pHead2;while(node1 != node2){node1 = node1 ? node1->next : pHead2;node2 = node2 ? node2->next : pHead1;}return node1;}
};