判断链表是否有环,并返回换起始点
#include <iostream>
#include <set>
using namespace std;
struct ListNode{
int val;
ListNode* next;
};
ListNode* detectCycle(ListNode* head){
set<ListNode*> set_node;
while(head){
if(set_node.find(head)!=set_node.end()){
return head;
}
set_node.insert(head);
head=head->next;
}
return NULL;
}
int main() {
ListNode a;
ListNode b;
ListNode c;
ListNode d;
ListNode e;
ListNode f;
a.val=1;
b.val=2;
c.val=3;
d.val=4;
e.val=5;
f.val=6;
a.next=&b;
b.next=&c;
c.next=&d;
d.next=&e;
e.next=&f;
f.next=&c;
ListNode* head;
ListNode* result;
head=&a;
result=detectCycle(head);
cout<<result->val<<endl;
return 0;
}