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;
        }
    };
  • 相关阅读:
    Vue之数据排序加签
    微信小程序之评分页面
    Vue之展示PDF格式的文档
    动态规划问题思考(DP)
    LitJson的使用
    c#事件管理器
    unity shader 学习
    unity ugui图片自适应文字内容大小
    unity3d各种OpenFileDialog操作
    ue4 使用3dsmax制作布料的插件及下载位置
  • 原文地址:https://www.cnblogs.com/jdneo/p/4742310.html
Copyright © 2011-2022 走看看