【C++】链表回环检测

//链表回环检测问题 
#include<iostream>
#include<cstdlib> 
using namespace std;
const int M=1024;

struct node
{
    int data;
    node *next;
};

node *test1=new node();
node *test2=new node();//1->ring;2->no ring
node* vis[M];

bool test_ring(const node *head)
{
    node *p=head->next;
    int i=0;
    while(p)
    {
        for(int j=0;j<i;j++)
        {
            if(vis[j]==p&&vis[j]!=NULL)
                return true;
        }
        vis[i]=p;
        p=p->next;
        i++;
        //cout<<vis[0]<<endl;
    }
    return false;
}

bool advanced_test(const node *head)
{
    node *slow=head->next;
    node *fast=slow;
    while(fast!=NULL&&fast->next!=NULL)
    {
        slow=slow->next;
        fast=fast->next->next;
        if(fast==slow)
        {
            return true;
        }
    }
    return false;
}

int main()
{
    node *p=test1;
    node *tag;//环切入点 
    for(int i=1;i<=5;i++)
    {
        node *t=new node;
        t->data=i*2;
        if(i==2)
            tag=t;
        p->next=t;
        p=p->next;
        p->next=NULL;
    }
    p->next=tag;
    /*
    p=test1->next;
    while(p)
    {
        cout<<p->data<<endl;
        p=p->next;
    }
    */
    p=test2;
    for(int i=1;i<=5;i++)
    {
        node *t=new node;
        t->data=i*2;
        p->next=t;
        p=p->next;
        p->next=NULL;
    }
    /*
    p=test2->next;
    while(p)
    {
        cout<<p->data<<endl;
        p=p->next;
    }
    */
    for(int i=0;i<M;i++)
        vis[i]=NULL;
        
    cout<<"normal test:"<<endl;
    if(test_ring(test1))
        cout<<"ring!"<<endl;
    else
        cout<<"no ring!"<<endl;
    if(test_ring(test2))
        cout<<"ring!"<<endl;
    else
        cout<<"no ring!"<<endl;
        
    cout<<"advanced test:"<<endl;
    if(advanced_test(test1))
        cout<<"ring!"<<endl;
    else
        cout<<"no ring!"<<endl;
    if(advanced_test(test2))
        cout<<"ring!"<<endl;
    else
        cout<<"no ring!"<<endl;
    
    
    return 0;
}

 

 

 

tz@HZAU

2019/3/14

posted on 2019-03-14 20:34  tuzhuo  阅读(255)  评论(0编辑  收藏  举报