单向链表判断是否存在循环
2015-10-22 15:33
561 查看
本文由 @lonelyrains 出品,转载请注明出处。
文章链接: http://blog.csdn.net/lonelyrains/article/details/49334141
方法1:单链表判断是否存在循环,即判断是否有两个指针指向同一位置,即判断海量指针中是否有相同数据。然后对所有指针选择插入排序或者快速排序。
方法2:设置两个指针互相追逐。一个指针每次前进一步,第二个指针每次前进两步,如果有相遇,则说明有环。
评论:
1、方法1算法效率不高,时间复杂度是O(n^2)或者O(nlogn),空间复杂度是O(n),未利用循环表的特性
2、方法2的时间复杂度和空间复杂度分别是O(n)和O(1)。较方法1的优势是,不需要事先知道链表有多大,利用了循环表的特性
方法2代码:
文章链接: http://blog.csdn.net/lonelyrains/article/details/49334141
方法1:单链表判断是否存在循环,即判断是否有两个指针指向同一位置,即判断海量指针中是否有相同数据。然后对所有指针选择插入排序或者快速排序。
方法2:设置两个指针互相追逐。一个指针每次前进一步,第二个指针每次前进两步,如果有相遇,则说明有环。
评论:
1、方法1算法效率不高,时间复杂度是O(n^2)或者O(nlogn),空间复杂度是O(n),未利用循环表的特性
2、方法2的时间复杂度和空间复杂度分别是O(n)和O(1)。较方法1的优势是,不需要事先知道链表有多大,利用了循环表的特性
方法2代码:
bool isCycle(node *head) { node *p = head->next; node *q = p; while ( (p!=NULL) && (q!=NULL) && (q->next!=NULL) ) { p = p->next; q = q->next->next; if ( p == q ) { return true; } } return false; }
相关文章推荐
- css em弹性布局
- background属性用法总结
- jQuery+PHP发布的内容进行无刷新分页(Fckeditor)
- JAVA 读取文件进行排序取出最后变更的的文件
- POJ 1182 食物链 带权并查集
- MongoDB基本使用
- epoll EPOLLRDHUP未定义解决方法
- CreateFileMapping/OpenFileMapping/MapViewOfFile
- 多行输入文本域
- 最容易理解的Android计算器实现
- (6)C# 之 ADO.NET 登陆框详解
- [BZOJ1127][POI2008] KUP子矩阵
- Android 常用工具函数
- Activiti工作流引擎核心介绍
- java里程碑之泛型--泛型方法
- 电商工具时代+电商思维时代
- java里程碑之泛型--泛型方法
- Spring MVC- 表单提交
- listview嵌套gridview
- (5)C#之ADO.NET 手写SqlHelp.cs 以及改进