码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode_160题——Intersection of Two Linked Lists(线性表,哈希表)

时间:2015-05-22 22:33:09      阅读:135      评论:0      收藏:0      [点我收藏+]

标签:

Intersection of Two Linked Lists

 Total Accepted: 28581 Total Submissions: 100989My Submissions

 

Write a program to find the node at which the intersection of two singly linked lists begins.


For example, the following two linked lists:

A:          a1 → a2
                   ↘
                     c1 → c2 → c3
                   ↗            
B:     b1 → b2 → b3

begin to intersect at node c1.


Notes:

  • If the two linked lists have no intersection at all, return null.
  • The linked lists must retain their original structure after the function returns.
  • You may assume there are no cycles anywhere in the entire linked structure.
  • Your code should preferably run in O(n) time and use only O(1) memory.

 

Credits:
Special thanks to @stellari for adding this problem and creating all test cases.

 

Hide Tags
 Linked List
Have you met this question in a real interview? 
Yes
 
No
 

Discuss

      这道题,没想到啥好的算法,就直接用了set,不过也AC了,就是先将一个线性表的所有节点都导进去,然后再对另一个链表从头开始查找就完了

#include<iostream>
#include <set>
using namespace std;

struct ListNode {
     int val;
     ListNode *next;
     ListNode(int x) : val(x), next(NULL) {}
	};

ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
	multiset<ListNode*> temp_set;
	if(headA==NULL||headB==NULL)
		return NULL;

	ListNode* ptr0=headA;
	while(ptr0!=NULL)
	{
		temp_set.insert(ptr0);
		ptr0=ptr0->next;
	}

	ListNode* ptr1=headB;
	while(ptr1!=NULL)
	{
		if(temp_set.count(ptr1)==1)
			return ptr1;
		ptr1=ptr1->next;
	}
	return NULL;
}
int main()
{

}#include<iostream>
#include <set>
using namespace std;

struct ListNode {
     int val;
     ListNode *next;
     ListNode(int x) : val(x), next(NULL) {}
	};

ListNode *getIntersectionNode(ListNode *headA, ListNode *headB) {
	multiset<ListNode*> temp_set;
	if(headA==NULL||headB==NULL)
		return NULL;

	ListNode* ptr0=headA;
	while(ptr0!=NULL)
	{
		temp_set.insert(ptr0);
		ptr0=ptr0->next;
	}

	ListNode* ptr1=headB;
	while(ptr1!=NULL)
	{
		if(temp_set.count(ptr1)==1)
			return ptr1;
		ptr1=ptr1->next;
	}
	return NULL;
}
int main()
{

}

  

leetcode_160题——Intersection of Two Linked Lists(线性表,哈希表)

标签:

原文地址:http://www.cnblogs.com/yanliang12138/p/4523384.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!