zoukankan      html  css  js  c++  java
  • LeetCode141 环形链表

    给定一个链表,判断链表中是否有环。

    进阶:
    你能否不使用额外空间解决此题?

     


     

     

    //章节 - 链表    
    //二、双指针技巧
    //1.环形链表
    /*
    算法思想:
        想象一下,有两个速度不同的跑步者。如果他们在直路上行驶,快跑者将首先到达目的地。但是,如果它们在圆形跑道上跑步,那么快跑者如果继续跑步就会追上慢跑者。
    这正是我们在链表中使用两个速度不同的指针时会遇到的情况:如果没有环,快指针将停在链表的末尾。如果有环,快指针最终将与慢指针相遇。
    */
    //算法实现:
    /**
     * 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) {
            if (head == NULL || head->next == NULL)
                return false;
            ListNode *fast = head, *slow = head;
            while (fast != NULL && fast->next != NULL) {
                fast = fast->next->next;    //快指针,每次移动两步
                slow = slow->next;  //慢指针,每次移动一步
                if (fast == slow)   //快慢指针相遇,说明有环
                    return true;
            }
            return false;
        }
    };
  • 相关阅读:
    【leetcode】ZigZag——easy
    联合
    AddChildViewController
    imageWithRender(图片的渲染模式)
    13.范型函数的使用:将字典合并到当前字典
    12.代码获取命名空间名称,并创建相应的类(anyClass 应用)
    13.static 面向对象
    11.swift 单例
    swift String 扩展
    swift UIView 扩展
  • 原文地址:https://www.cnblogs.com/parzulpan/p/10061467.html
Copyright © 2011-2022 走看看