【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   tuzhuo  阅读(263)  评论(0编辑  收藏  举报

编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
历史上的今天:
2018-03-14 2014年蓝桥杯省赛A组c++第3题(数组构造+暴力求解)
2018-03-14 2014年蓝桥杯省赛A组c++第1题(暴力求解)
2018-03-14 2014年蓝桥杯省赛A组c++第2题(推公式)
2018-03-14 2016年蓝桥杯省赛A组c++第8题(暴力求解)
2018-03-14 2016年蓝桥杯省赛A组c++第5题(计算机组成原理)
2018-03-14 2016年蓝桥杯省赛A组c++第4题(算法填空)
2018-03-14 2016年蓝桥杯省赛A组c++第2题(暴力求解)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示