算法-链表-之查找链表环的入口节点
思路:很自然的想到用map,利用map key-value 键值对的唯一性。遍历链表把每个元素保存到map里面,如果是重复的就不保存,同时就返回这个结果,就是想要的值。但是这样操作下来,空间复杂度是o(n),时间也是o(n),有没有更好的办法?
1 /* 2 struct ListNode { 3 int val; 4 struct ListNode *next; 5 ListNode(int x) : 6 val(x), next(NULL) { 7 } 8 }; 9 */ 10 #include "iostream" 11 #include <map> 12 class Solution { 13 public: 14 ListNode* EntryNodeOfLoop(ListNode* pHead) { 15 map<ListNode*,int> m; 16 if(pHead==NULL) 17 { 18 return NULL; 19 } 20 ListNode* temp=pHead; 21 while(temp!=NULL) 22 { 23 if(m.find(temp)==m.end()) 24 { 25 m[temp]=temp->val; 26 } 27 28 else{ 29 return temp; 30 } 31 temp=temp->next; 32 } 33 return NULL; 34 35 } 36 };
还有个思路是用双指针快慢法,不过有点绕,这里就不展开了
主要为了自己学习