您的位置:首页 > Web前端

剑指offer-两个链表的第一个公共节点

2017-03-18 19:21 363 查看
1.用map查找暴搜,时间复杂度O(mlogn),空间复杂度O(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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: