课程【 判断链表是否有环】
来源:互联网 发布:单片机 工作过程 编辑:程序博客网 时间:2024/06/11 21:25
- 1000ms
- 65536K
有一个链表,我们需要判断链表中是否存在环。有环则输出true,否则输出false。
输入有多行,每行为由空格分隔的两个整数m和n,m是当前结点的数据,n代表当前结点的指针域指向第n个结点。
n存在四种情形:
①为-1,代表该结点的指针域指向NULL,输入结束;
②指向该结点之前的结点,如第3个结点的指针域指向n = 2的结点;
③指向自己,如第3个结点的指针域指向n = 3的结点;
④指向其直接后继结点,如第3个结点的指针域指向n = 4的结点,不能指向n = 5的结点。
当输入为:
1 2
2 3
3 -1
时,代表:第1个结点的数据为1,指向第2个结点;第2个结点的数据为2,指向第3个结点;第3个结点的数据为3,指向NULL,输入结束。
样例输入
1 23 34 25 -1
样例输出
true
先记录每一个结点-.-
从每一个可能是头结点的结点开始进行链表下移-.-
当循环次数超过n时-.-就是发现了链表中有环了
代码:
#include<cstring>#include<iostream>using namespace std;struct List{ int hao; List * next;}dian[10010];int main(){ bool fafe=false; int i=1,a,b,h[10010]; memset(h,0,sizeof(h)); int shu[10010]={0}; List * head=NULL; List * p=new List(); while (cin>>a>>b) { dian[i].hao=i; if (b==-1) dian[i].next=NULL; else dian[i].next=&dian[b]; i++; h[b]++; } int n=i-1; for (i=1;i<=n;i++) { if (!h[i]) { int lp=0; head=&dian[i]; while (head->next) { lp++; head=head->next; if (lp>n) { fafe=true; break; } } } if (fafe) break; } if (fafe) cout<<"true"<<endl; else cout<<"false"<<endl; return 0;}
0 0
- 课程【 判断链表是否有环】
- 判断链表是否有环
- 判断链表是否有环
- 如何判断链表是否有环
- 判断链表是否有环
- 判断链表是否有环
- 判断一个链表是否有环
- 单向链表判断是否有环
- 判断链表是否有环
- 判断一个链表是否有环
- 判断链表是否有环
- 算法-判断链表是否有环
- 判断链表是否有环
- 判断一个链表是否有环
- 判断链表是否有环
- 判断循环链表是否有环
- 判断链表是否有环
- 判断链表是否有环
- POJ3349——Snowflake Snow Snowflakes
- 使用C++类的成员函数来做windows的窗口函数
- refresh的停车场
- 东芝硬盘数据丢失怎么恢复
- mysql索引的实现原理
- 课程【 判断链表是否有环】
- Android屏幕密度(Density)和分辨率的关系
- 【置顶】经典背包讲解01背包&&完全背包&&多重背包
- poj 1066 Treasure Hunt
- 用Maven部署war包到远程Tomcat服务器
- Android 保存List数据(SharedPreferences)
- 算法学习之折半查找
- Android开发工具
- C#控制台基础 获取当前的年月日 时分秒