面试题:判断单链表是否为循环链表-快慢指针
2013-06-19 10:25
477 查看
题目:判断单链表是否为循环链表(判断链表中是否存在环)
分析:使用快慢2个指针,2个指针都从链表头开始遍历,快指针每次移动2个结点,满指针每次移动1个结点。若链表中存在环,则快慢2指针后在链表的某一位置相遇,否则她们不会相遇。
typedef struct Lnode
{
int data;
struct Lnode *next;
}*Linklist;
//检测单链表是否为循环链表或链表中是否存在环
int findloop(Linklist *L)
{
Linklist fast,slow;
if(NULL == L)
{
printf("input error!\n");
return -1;
}
fast = slow = L;
while(1)
{
if(NULL == fast->next)
return -1;
else if((fast == slow) || (fast->next == slow))
return 0;
else
{
fast = fast->next->next;
slow = slow->next;
}
}
}
分析:使用快慢2个指针,2个指针都从链表头开始遍历,快指针每次移动2个结点,满指针每次移动1个结点。若链表中存在环,则快慢2指针后在链表的某一位置相遇,否则她们不会相遇。
typedef struct Lnode
{
int data;
struct Lnode *next;
}*Linklist;
//检测单链表是否为循环链表或链表中是否存在环
int findloop(Linklist *L)
{
Linklist fast,slow;
if(NULL == L)
{
printf("input error!\n");
return -1;
}
fast = slow = L;
while(1)
{
if(NULL == fast->next)
return -1;
else if((fast == slow) || (fast->next == slow))
return 0;
else
{
fast = fast->next->next;
slow = slow->next;
}
}
}
相关文章推荐
- 四道有趣的单链表面试题(单链表反序、找出链表的中间元素、链表排序、判断一个单链表是否有环) (转)
- 数据结构之链表面试题汇总(三)判断单链表是否有环、取出环的起始点、得到有环链表中环的长度
- linked-list-cycle——链表、判断是否循环链表、快慢指针
- 四道有趣的单链表面试题(单链表反序、找出链表的中间元素、链表排序、判断一个单链表是否有环) (转)
- 判断单链表是否为循环链表-----在有序链表中寻找中位数------使用快慢指针
- 四道有趣的单链表面试题(单链表反序、找出链表的中间元素、链表排序、判断一个单链表是否有环)
- 链表面试题----判断一个单链表是否带环,若带环,求入口点和环的长度
- 判断单链表是否是循环链表以及找出循环链表入口
- 四道有趣的单链表面试题(单链表反序、找出链表的中间元素、链表排序、判断一个单链表是否有环
- 快慢法判断单链表中是否有循环链表
- 【面试题】-判断单链表是否有环并找到环入口(快慢指针)
- 四道有趣的单链表面试题(单链表反序、找出链表的中间元素、链表排序、判断一个单链表是否有环)
- 四道有趣的单链表面试题(单链表反序、找出链表的中间元素、链表排序、判断一个单链表是否有环)
- 四道有趣的单链表面试题(单链表反序、找出链表的中间元素、链表排序、判断一个单链表是否有环)
- 判断单链表是否有环,如果有找出环的入口位置=>求两个相交链表的交点
- 判断单链表是否存在环,判断两个链表是否相交问题详解
- 判断链表中是否有环 ----- 有关单链表中环的问题
- 判断单链表是否存在环,判断两个链表是否相交问题详解
- 链表趣题---快慢指针判断链表是否有环
- 判断一个单项链表是否有循环,如果有循环输出循环点