题目描述
输入两个链表,找出它们的第一个公共结点。
思路:可以将它当成有环进行思考,让两链表同时从头节点开始遍历,如果某个链表遍历到末尾时,则从另一个链表的头节点开始遍历。两个指针最终一定会相等,从而跳出循环,而且只有两种情况,一种是在交点处相等,另一种是遍历到链表末尾相等。为什么说一定会相等呢?因为两个链表节点所走的路程恰好是两个链表的长度,所以一定会相等。
/*
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 nullptr;
ListNode* pNode1 = pHead1;
ListNode* pNode2 = pHead2;
while (pNode1 != pNode2) {
pNode1 = pNode1 ? pNode1->next : pHead2;
pNode2 = pNode2 ? pNode2->next : pHead1;
}
return pNode1;
}
};