You need to enable JavaScript to run this app. 快慢指针检测单链表环时无环场景末尾printf未输出是什么原因
优惠活动
大模型
产品
解决方案
定价
更多

快慢指针检测单链表环时无环场景末尾printf未输出是什么原因

问题根因与修复方案

核心错误原因

你代码的问题出在while循环的判断条件上:

  • 你使用了||(逻辑或)作为判断运算符,逻辑或的规则是只要任意一个条件成立就进入循环。当链表无环时,快指针Fast最终会走到链表末尾变为NULL,此时第一个判断Fast != NULL不成立,程序会继续判断第二个条件Fast->next != NULL,访问空指针的成员会直接触发段错误,进程被系统终止,自然执行不到循环后的printf语句。
  • 正确的判断条件应该用&&(逻辑与):只有Fast本身不为空,且Fast的下一个节点也不为空时,才能保证Fast->next->next的访问是合法的,不会出现空指针访问。

额外优化建议

你当前的printf语句没有加换行符\n,在多数终端环境下标准输出是行缓冲模式,没有换行符时内容可能不会被主动刷新到终端上,即使程序正常执行到打印逻辑也可能看不到输出,建议给所有printf的字符串末尾加上\n。

修复后的完整代码

// 检测单链表是否存在环,使用快指针(步长2)慢指针(步长1)方案
void DetactLoop(struct Node **head)
{
    struct Node *Fast = *head;
    struct Node *Slow = *head;
    if (Fast == NULL)
    {
        printf("Head is NULL\n");
        return;
    }
    // 把 || 改为 &&
    while (Fast != NULL && Fast->next != NULL)
    {
        Fast = Fast->next->next;
        Slow = Slow->next;
        if (Fast == Slow)
        {
            printf("Loop detected!\n");
            return;
        }
    }
    printf("No Loop found!\n");
}

内容的提问来源于stack exchange,提问作者roshannepal_x

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.16 09:06:08