/* 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; // 双指针,当 cur1等于 cur2时返回公共的节点,退出循环。或者 cur1和 cur2同时为 nullptr即没有公共节点时退出 while循环 while(cur1 || cur2) { if(cur1 == cur2) { return cur1; } // cur1和 cur2同时遍历,注意当其中一个指针为空时跳转到另一个链表,而不是另一个链表上的指针(cur1或cur2) cur1 = cur1==nullptr ? pHead2 : cur1->next; cur2 = cur2==nullptr ? pHead1 : cur2->next; } // 如果cur1、cur2同时为空时即没有公共的节点返回 nullptr return nullptr; } };