输入两个链表,找出它们的第一个公共结点。
分析:两个单链表如果存在第一个公共结点,则后续结点一定都公共,
因为结点里包含next指针,如果第一个公共结点相同,则next必然相同,
所以第一个公共结点后链表合并。
思路1:设表1长度n,表2长度m,暴力法嵌套遍历两个链表需要O(mn)的时间复杂度,
可以采用hash的思想将其中一个转存为哈希表结构,这样建哈希表时间O(m),
而遍历链表时间O(n),而遍历时查找哈希表的时间为O(1),因此复杂度降为O(m+n),
但需要辅助空间。(这种哈希优化的策略是种一般性的思路,谨记!)
class Solution {
public:
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) {
if(pHead1==NULL||pHead2==NULL)return NULL;
unordered_multiset<ListNode*> hashset;
ListNode *pNode1=pHead1,*pNode2&#