判断链表是否存在环路
2015-06-07 19:09
239 查看
判断思路:设置两个指针(slow, fast),初始值都指向头,slow每次前进一步,fast每次前进两步,如果链表存在环,则fast必定先进入环,而slow后进入环,两个指针必定相遇(当然,fast先行头到尾部为NULL,则是无环链表)。
typedef struct Node{
int data;
struct Node *Next;
}*Lnklst;
bool IsExitsLoop(Lnklst pHead)
{
Lnklst slow = pHead, fast = pHead;
while(fast && fast->Next)
{
slow = slow->Next;
fast = fast->Next->Next;
if(slow == fast)
break;
}
return !(fast == NULL && fast->Next == NULL);
}
typedef struct Node{
int data;
struct Node *Next;
}*Lnklst;
bool IsExitsLoop(Lnklst pHead)
{
Lnklst slow = pHead, fast = pHead;
while(fast && fast->Next)
{
slow = slow->Next;
fast = fast->Next->Next;
if(slow == fast)
break;
}
return !(fast == NULL && fast->Next == NULL);
}
相关文章推荐
- [C/C++]反转链表
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- Linux内核链表实现过程
- C++链表倒序实现方法
- C#通过链表实现队列的方法
- 找出链表倒数第n个节点元素的二个方法
- Java数据结构之简单链表的定义与实现方法示例
- C语言单循环链表的表示与实现实例详解
- PHP小教程之实现链表
- C语言双向链表的表示与实现实例详解
- C语言实现输出链表中倒数第k个节点
- C++语言实现线性表之链表实例
- STL list链表的用法详细解析
- C语言创建链表错误之通过指针参数申请动态内存实例分析
- 编码实现从无序链表中移除重复项(C和JAVA实例)
- Java采用循环链表结构求解约瑟夫问题
- Python实现的数据结构与算法之链表详解
- 结构之美:单链表的初始化、创建与遍历
- 结构之美:单链表的头结点与头指针
- 带头结点与不带头结点的单链表初始化