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;
        }
    };
  • 相关阅读:
    函数模板
    三次握手四次分手
    多态
    函数指针与多态
    继承和派生
    使用ntp 实现时间同步
    Hadoop之Mapreduce 程序
    hadoop学习笔记二
    hadoop学习笔记 一
    大数据知识和资料总结
  • 原文地址:https://www.cnblogs.com/parzulpan/p/10061467.html
Copyright © 2011-2022 走看看