社区
C语言
帖子详情
判断链表有没有环(要求用两种方法)
daring_t
2010-05-27 06:12:14
给个思路吧,谢谢!
...全文
405
21
打赏
收藏
判断链表有没有环(要求用两种方法)
给个思路吧,谢谢!
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
elepht
2010-05-31
打赏
举报
回复
快慢指针
yuanzhang198711
2010-05-28
打赏
举报
回复
[Quote=引用 16 楼 artifly2000 的回复:]
追赶法
要不就在节点中加遍历标记,看顺序遍历是否会会访问到已遍历过的节点
[/Quote]
所言极是,两种方法,都比较好。可能第二种的开销更吧,需要另外开辟空间。
阿磊2013
2010-05-28
打赏
举报
回复
追赶法,学习了。我认为如果能对遍历过的节点加个标记,也是一个不错的方法
delphiwcdj
2010-05-28
打赏
举报
回复
快慢指针
bobo364
2010-05-28
打赏
举报
回复
追赶法不错,也算是学习了
ArtiFly2000
2010-05-28
打赏
举报
回复
追赶法
要不就在节点中加遍历标记,看顺序遍历是否会访问到已遍历过的节点
thinkli
2010-05-27
打赏
举报
回复
gz_qmc的程序是不是逻辑有些问题,链表有环,但环不一定就包含head,比如一个6字形的环。还是追赶法比较好吧。
gz_qmc
2010-05-27
打赏
举报
回复
当然,如果是双链
也可以这样
if(head->prev) 有LOOP
else 没有
gz_qmc
2010-05-27
打赏
举报
回复
刚才的原理是:
扫描的过程如果能回到头指针,就是循环的
daring_t
2010-05-27
打赏
举报
回复
就是跟head比较与步长法吗?
gz_qmc
2010-05-27
打赏
举报
回复
方法一:
bool CheckLoop(LPTYPE Head)
{
if(NULL==Head)
return false;
LPTYPE pCur=Head->next;
while(pCur)
{
if(pCur==Head)
return true;
pCur=pCur->next;
}
return false;
}
方法二:
bool CheckLoop(LPTYPE Head)
{
LPTYPE pCur=Head;
while(pCur->next)
{
if(pCur->next==Head)
return true;
pCur=pCur->next;
}
return false;
}
thehunters
2010-05-27
打赏
举报
回复
追赶法:
struct node
{
int data;
node*next;
}
bool loop(node*head )
{
if( !head->next->next)
return false;
node*p1 = head->next,*p2 = head->next->next ;
while(p1&&p2)
{
if(p1==p2)
return true;
p1 = p1->next;
if(p2->next)
p2 = p2->next->next;
else
break;
}
return false;
}
daring_t
2010-05-27
打赏
举报
回复
恩,还有没有其他的方法呢 ?
james_hw
2010-05-27
打赏
举报
回复
[Quote=引用 6 楼 daring_t 的回复:]
引用 5 楼 pengzhixi 的回复:
如果有环的话,移动2步的总有机会通过环绕到移动一步的后面并超过它。
如果链很长的话,那就至少要遍历一次半的链长了,有没有效率高些的方法啊?
[/Quote]
利用步长是标准答案。
qq120848369
2010-05-27
打赏
举报
回复
这有什么办法啊.
不走完永远不知道有没有环
daring_t
2010-05-27
打赏
举报
回复
[Quote=引用 5 楼 pengzhixi 的回复:]
如果有环的话,移动2步的总有机会通过环绕到移动一步的后面并超过它。
[/Quote]
如果链很长的话,那就至少要遍历一次半的链长了,有没有效率高些的方法啊?
pengzhixi
2010-05-27
打赏
举报
回复
如果有环的话,移动2步的总有机会通过环绕到移动一步的后面并超过它。
daring_t
2010-05-27
打赏
举报
回复
[Quote=引用 2 楼 pengzhixi 的回复:]
前面那个一次移动2步,后面的一次移动一步。
[/Quote]
这个...麻烦能不能再详细点啊?
z569362161
2010-05-27
打赏
举报
回复
pengzhixi
你跟他们是一伙的。
pengzhixi
2010-05-27
打赏
举报
回复
前面那个一次移动2步,后面的一次移动一步。
加载更多回复(1)
判断
链表
是否有
环
判断
链表
是否有
环
的解法有很多,下面归纳几种常见算法。
判断
链表
是否存在
环
方法
一:通过双循
环
遍历完成,外层循
环
从头结点开始遍历,对于遍历到一个新节点newNode,内层循
环
都要从头结点遍历到该新节点的上一个...
python
判断
链表
是否有
环
_
判断
链表
是否有
环
(指向表头结点的指针为head)
方法
一:(1)用两个指针p1和p2分别指向表头结点,即p1=p2=head(2)p1和p2分别采用1和2作为步长遍历该
链表
。(注意,p2应该检查当前结点的下一个结点是否为NULL)(3)如果p1或者p2遇到了NULL,...
如何
判断
链表
有
环
(三种
方法
)
方法
一、穷举遍历 ...点当中存在相同节点ID,则说明该节点被遍历过两次,
链表
有
环
;如果之前的所有节点当中不存在相同的 节点,就继续遍历下一个新节点,继续重复刚才的操作。 例如这样的
链表
:A->B->...
美团一面:如何
判断
java
判断
链表
是否有
环
?这
两种
实现方式你都知道吗?
首先如何
判断
链表
是否有
环
,这个时候首先需要知道
链表
是否为空,如果不为空,则继续
判断
。 思路:首先定义两个变量,一个fast,一个slow,让fast 每次走两步,slow每次走一步,当fast和slow相遇时,即是该
链表
存在
环
...
常见面试题:
链表
3-
判断
链表
是否有
环
以及
环
入口节点
常见面试题3:
链表
-
判断
链表
是否有
环
以及
环
入口节点 内容目录常见面试题3:
链表
-
判断
链表
是否有
环
以及
环
入口节点一、...能想到的解法大概有
两种
,第一种就是把每次遍历的结果放到一个
链表
中,每次遍历的时候
判断
该链
C语言
70,026
社区成员
243,245
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章