双指针法,当两个指针相遇时走的距离一样。
- 一个指针走到空时,从另外一端开始走。两个指针会最终会在公共节点或者空指针相遇
移动到新头节点属于一步,和移动到下一个节点地位等价,所以要并列处理
- 如果先移动后判断为空时移动,则错过两个节点都为空的情况
- 如果先判断再为空,相当于走了两步,一步到新头节点,一步到新头节点的下一个节点
/*
struct ListNode {
int val;
struct ListNode *next;
ListNode(int x) :
val(x), next(NULL) {
}
};*/
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
ListNode* cur1=pHead1;
ListNode* cur2=pHead2;
while(cur1!=cur2)
{
cur1=cur1?cur1->next:pHead2;
cur2=cur2?cur2->next:pHead1;
}
return cur1;
}
};



京公网安备 11010502036488号