WilL846 2023-08-15 16:03 采纳率: 75%
浏览 9
已结题

判断链表是否存在环的程序问题

这是一个用快慢指针判断链表是否存在环的程序,leetcode 141请问为什么我这样写没法通过全部用例,未通过的用例是[1, 2](无环)

class Solution {
public:
    bool hasCycle(ListNode *head) {
        ListNode *fast = head, *slow = head;
        while(fast != nullptr && fast->next != nullptr && fast != slow){
            slow = slow->next;
            fast = fast->next->next;
        }
        if(fast == nullptr || fast->next == nullptr){
            return false;
        }else{
            return true;
        }
    }
};
  • 写回答

2条回答 默认 最新

  • 一个想上岸的人 2023-08-23 16:59
    关注

    一开始的快慢指针都指向head,而while判断条件需要fast!=slow,也就是说不会进入while循环。需要修改fast指针为head->next,使得可进入while循环,在此之前需要先判断head->next是否空(或删掉fast!=slow这一判断条件,而在while循环内判断快慢指针是否相等)
    以下是两种方式修改的代码:

    class Solution {
    public:
        bool hasCycle(ListNode *head) {
            if(head == nullptr || head->next == nullptr){
                return false;
            }
            ListNode *fast = head->next, *slow = head;
            while(fast != nullptr && fast->next != nullptr && fast != slow){
                slow = slow->next;
                fast = fast->next->next;
            }
            if(fast == nullptr || fast->next == nullptr) return false;
            return true;
        }
    };
    
    class Solution {
    public:
        bool hasCycle(ListNode *head) {
            ListNode *fast = head, *slow = head;
            while(fast != nullptr && fast->next != nullptr){
                slow = slow->next;
                fast = fast->next->next;
                if(fast == slow ) return true;
            }
            if(fast == nullptr || fast->next == nullptr) return false;
            return true;
        }
    };
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月13日
  • 已采纳回答 9月5日
  • 创建了问题 8月15日

悬赏问题

  • ¥50 安装华大九天aether
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证