题解 | #判断链表中是否有环#

判断链表中是否有环

http://www.nowcoder.com/practice/650474f313294468a4ded3ce0f7898b9

一开始没有考虑到快指针会越界,后面快指针第二步加了个if判断;
然后是一开始指向同个节点,不应该在循环里判断不相等继续循环,应该作为终止条件;

原版:

class Solution {
public:
    bool hasCycle(ListNode *head) {
      // if (head == nullptr || head->next == nullptr) {
      // 注意:!!!单个节点也可以成环,原先考虑不周但是测试都过了。。。
      if (head == nullptr) {
        return false;
      }
      
      ListNode *fast = head, *slow = head;
      
      while (fast && slow) {  // 这里的slow判断其实多余了,无环时一定是fast先到
        fast = fast->next;
        if (fast)   // 这里防止fast为空导致越界访问
          fast = fast->next;
        slow = slow->next;
        if (fast == slow)   //  有环退出循环,其实可以直接返回
          break;
      }
      
      return fast == slow;  // 有环相等为true
    }
};

官方版本(更好)

class Solution {
public:
    bool hasCycle(ListNode *head) {
      // if (head == nullptr || head->next == nullptr) {
      // 同上
      if (head == nullptr) {
        return false;
      }
      
      ListNode *fast = head, *slow = head;
      
      while (fast && fast->next) {
        fast = fast->next->next;
        slow = slow->next;
        if (fast == slow) 
          return true;
      }
      
      return false;
    }
};
全部评论

相关推荐

屌丝逆袭咸鱼计划:心态摆好,man,晚点找早点找到最后都是为了提升自己好进正职,努力提升自己才是最关键的😤难道说现在找不到找的太晚了就炸了可以鸡鸡了吗😤早实习晚实习不都是为了以后多积累,大四学长有的秋招进的也不妨碍有的春招进,人生就这样
点赞 评论 收藏
分享
现在才开始投还有可能吗😭😭😭
牛客621925249号:开秋招了已经
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务