#include<iostream>
#include"ListNode.h"
#include<set>
//单链表求环,将该链表的节点地址依次进入集合中,然后第一重复的节点就是环开始的位置
class Solution
{
public:
int detectCircle(ListNode* l ){
std::set<ListNode *> S;
//建立一个结点的集合, 不断向里面插入元素,去重
while(l){
// std::cout<<l->val<<std::endl;
if(S.find(l)!=S.end()){
return l->val;
}
S.insert(l);
l=l->next;
}
return 0;
}
};
int main()
{
ListNode a(8);
ListNode b(1);
ListNode c(2);
ListNode d(3);
ListNode e(4);
a.next=&b;
b.next=&c;
c.next=&d;
d.next=&c;
std::cout<<"the List has been generated!"<<std::endl;
ListNode* p = &a;
Solution solution;
int result =solution.detectCircle(p);
std::cout<<"result: "<<result<<std::endl;
return 0;
}
单链表求环的起始位置(Set)
最新推荐文章于 2021-03-19 11:24:32 发布