struct
node
... {
char val;
node* next;
}
bool check( const node * head) ... {} // return false : 无环;true: 有环
一种O(n)的办法就是:
设两个指针,一个每次递增一步,一个每次递增两步,如果有环的话两者必然重合,反之亦然
bool check( const node * head)
... {
if(head==NULL) return false;
node *low=head, *fast=head->next;
while(fast!=NULL && fast->next!=NULL)
...{
low=low->next;
fast=fast->next->next;
if(low==fast) return true;
}
return false;
}
... {
char val;
node* next;
}
bool check( const node * head) ... {} // return false : 无环;true: 有环
一种O(n)的办法就是:
设两个指针,一个每次递增一步,一个每次递增两步,如果有环的话两者必然重合,反之亦然
bool check( const node * head)
... {
if(head==NULL) return false;
node *low=head, *fast=head->next;
while(fast!=NULL && fast->next!=NULL)
...{
low=low->next;
fast=fast->next->next;
if(low==fast) return true;
}
return false;
}