剑指offer-两个链表的第一个公共节点
2017-03-18 19:21
363 查看
1.用map查找暴搜,时间复杂度O(mlogn),空间复杂度O(n);
2.利用栈,倒过来从公共节点开始搜索,直到遇到不公共的节点位置,时间复杂度O(m+n)空间复杂度O(m+n)
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { map<ListNode*,int> match; ListNode* head=pHead1; while(head) { match[head]=1; head=head->next; } head=pHead2; while(head) { if(match.find(head)!=match.end()) return head; head=head->next; } return NULL; }
2.利用栈,倒过来从公共节点开始搜索,直到遇到不公共的节点位置,时间复杂度O(m+n)空间复杂度O(m+n)
ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { stack<ListNode*> shead1; stack<ListNode*> shead2; ListNode* commn=NULL; while(pHead1) { shead1.push(pHead1); pHead1=pHead1->next; } while(pHead2) { shead2.push(pHead2); pHead2=pHead2->next; } if(shead1.size()==0 || shead2.size()==0) return NULL; while (shead1.top()==shead2.top()) { commn=shead1.top(); shead1.pop(); shead2.pop(); if(shead1.size()==0 || shead2.size()==0) break; } return commn; }
相关文章推荐
- 剑指offer-面试题37 两个链表的第一个公共节点
- 【剑指offer系列】 两个链表的第一个公共节点___37
- 剑指offer系列之35:两个链表的第一个公共节点
- 《剑指offer》编程题java实现(二十二):两个链表的第一个公共节点
- 剑指offer解题报告(Java版)——找到两个链表的第一个公共节点 37
- 剑指offer 面试题37—两个链表的第一个公共节点
- 剑指offer(38):两个链表的第一个公共节点
- 剑指offer-两个链表的第一个公共节点
- 剑指Offer - 两个链表第一个公共节点
- 《剑指Offer》面试题:寻找两个链表的第一个公共节点
- 剑指offer——面试题37:两个链表的第一个公共节点
- 两个链表的第一个公共节点(剑指offer)
- 剑指offer----两个链表的第一个公共节点----java实现
- 剑指offer—两个链表的第一个公共节点
- 《剑指offer》两个链表的第一个公共节点
- 剑指offer系列之三十五:两个链表的第一个公共节点
- 剑指offer-第五章优化时间和空间效率(两个链表的第一个公共节点)
- 剑指offer——两个链表的第一个公共结点
- 剑指Offer 37 两个链表的第一个公共结点
- 【剑指offer】面试题52:两个链表的第一个公共节点