判断链表是否有环
2016-01-20 17:05
218 查看
题目表述如下:
下面提供两种解题思路:
第一种:(遍历思想)
第二种:
问题扩展:
http://blog.csdn.net/thefutureisour/article/details/8174313
下面提供两种解题思路:
第一种:(遍历思想)
#include<cstdio> // 本题考查的是静态链表 int main() { int list[1000]; // 存放链表指针(下标),这里没有必要保存链表里的数据 int visited[1000] = {0}; // 标志是否访问 int ind = 1; int n, m; while(scanf("%d%d", &m, &n)==2) { list[ind++] = n; if(n==-1) break; } int isLoop = 0; for(int i=1; i!=-1; i=list[i]) { if(visited[i]) { // 前面已经访问过了,表明有环 isLoop = 1; break; } visited[i] = true; } if(isLoop) printf("true\n"); else printf("false\n"); return 0; }
第二种:
#include<iostream> using namespace std; struct List { int num; List *next; }; bool isLoop() { bool flag = false; List *p = NULL, *q = NULL; int m, n, count = 1; cin >> m >> n; p = new List; p->num = m;//结点数据亦可不保存 while (n != -1) { if ((n-count) == 1) {//直接后继结点 q = p; p = p->next; }else if ((n-count) == -1) {//前驱结点 q = p->next; flag = true; }else if ((n-count) == 0) {//指向当前结点 q = p; flag = true; }else { break; } cin >> m >> n; p = new List; p->num = m; count++; } p->next = NULL; return flag; } int main() { cout<<(isLoop()?"true":"false"); return 0; }
问题扩展:
http://blog.csdn.net/thefutureisour/article/details/8174313
相关文章推荐
- ios 手写键盘闪退问题 UIKBBlurredKeyView candidateList
- Hibernate hsql查询 使用 分组函数,case when 子句及关联其他对象
- datagrid easyui 数据下面新增合计列
- git 常用命令
- 最大不相交区间求法分析(结合一道例题)
- iOS学习:iOS沙盒(sandbox)机制和文件操作(一)
- 取出session中的所有属性与值的方法
- Scala - 处理时间(nscala-time - Joda Time的scala封装)
- Cocopode的安装和使用
- 【游戏引擎】win7配置安装firefly
- Auto-Layout 的各种坑Unable to create description in descriptionForLayoutAttribute_layoutItem_coefficient
- block之---应用场景:做参数和返回值
- jquery选择器
- 设计模式(十六):建造者模式
- PHP urlencode
- wdatepicker 日期设置
- android 分析内存泄露情况
- js删除数组里的某个元素
- UML之深入浅出类图讲义
- Android Recovery 升级整体架构和流程