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

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()

{



}

  

你可能感兴趣的:(intersect)