双指针法,当两个指针相遇时走的距离一样。

  • 一个指针走到空时,从另外一端开始走。两个指针会最终会在公共节点或者空指针相遇

移动到新头节点属于一步,和移动到下一个节点地位等价,所以要并列处理

  • 如果先移动后判断为空时移动,则错过两个节点都为空的情况
  • 如果先判断再为空,相当于走了两步,一步到新头节点,一步到新头节点的下一个节点
/*
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;
    }
};