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日

悬赏问题

  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)
  • ¥15 船舶旋回实验matlab
  • ¥30 SQL 数组,游标,递归覆盖原值
  • ¥15 为什么我的数据接收的那么慢呀有没有完整的 hal 库并 代码呀有的话能不能发我一份并且我用 printf 函数显示处理之后的数据,用 debug 就不能运行了呢
  • ¥20 gitlab 中文路径,无法下载
  • ¥15 用动态规划算法均分纸牌
  • ¥30 udp socket,bind 0.0.0.0 ,如何自动选取用户访问的服务器IP来回复数据