zoukankan      html  css  js  c++  java
  • 【LeetCode】141. Linked List Cycle

    题目:

    Given a linked list, determine if it has a cycle in it.

    Follow up:
    Can you solve it without using extra space?

    提示:

    首先,题目中要求'without using extra space',指的是空间复杂度必须控制在O(1)内。

    因此可以创建两个变量,先同时指向head,然后每一轮循环中,令其中一个变量沿链表向前“走”两步,另一个走“一步”,这样的话每一个循环后他们两者的距离差会+1。

    如果链表里有回路的话,那么这个回路相当于是一个取模的操作,当两者的距离差等于回路的长度时,其实就意味着已经相遇了。因此这两个变量终会在某一步相遇,这时候就能判断出有回路了。

    反之如果没有回路,那么“走”的较快的那个变量会率先走到NULL,这时候就可以判定没有回路。

    代码:

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        bool hasCycle(ListNode *head) {
            ListNode *fast = head;
            ListNode *slow = head;
            while (fast && fast->next) {
                fast = fast->next->next;
                slow = slow->next;
                if (fast == slow) 
                    return true;
            }
            return false;
        }
    };
  • 相关阅读:
    2020.4.13 机器学习相关数学基础
    2020.3.30 机器学习概述
    12.18语法制导的语义翻译
    12.11算符优先分析
    12.4自下而上语法分析
    11.27实验二 递归下降语法分析
    11.20LL(1)文法的判断,递归下降分析程序
    11.13消除左递归
    4.K均值算法--应用
    3.K均值算法
  • 原文地址:https://www.cnblogs.com/jdneo/p/4742310.html
Copyright © 2011-2022 走看看