zoukankan      html  css  js  c++  java
  • Linked List Cycle

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

     1 /**
     2  * Definition for singly-linked list.
     3  * struct ListNode {
     4  *     int val;
     5  *     ListNode *next;
     6  *     ListNode(int x) : val(x), next(NULL) {}
     7  * };
     8  */
     9 class Solution {
    10 public:
    11     bool hasCycle(ListNode *head) {
    12         if(!head)
    13             return false;
    14         ListNode* fast = head->next;
    15         ListNode* slow = head;
    16         while(fast) {
    17             if(fast == slow)
    18                 return true;
    19             if(fast->next&&fast->next->next){//短路的技巧
    20                 fast = fast->next->next;
    21                 slow = slow->next;
    22             }
    23             else
    24                 return false;
    25         }
    26         return false;
    27     }
    28 };

      设置两个指针,一个快指针,一个慢指针。快指针每次走两步,慢指针每次走一步,如果相遇就是有环。

      19行先判断快指针能不能走1步,如果能在判断2步之后是不是链表末尾,如果不是末尾就可以向下走。

    ==============================我是分割线=============================================

      《编程之美》上看到一道题目,判断两个两个链表(无环)是否相交,可以转化为这题的解法,把第二个链表头接到另一个的末尾,在检测是否有环,有环就是相交。

      两一种解法更简单,比较倒数第二节链表是否相等越来愈感受到算法的美妙了.QAQ

  • 相关阅读:
    1. Spring Web MVC
    spring web 文件配置详解
    Socket、SocketServer与WebSocket的关系与区别
    log4j2文件结构
    Spring Bean的生命周期
    Spring 初始化bean过程
    java反射原理与使用
    5、Spring 面向切面的编程
    Impala队列内存参数分析
    IDEA中flink程序报错找不到类
  • 原文地址:https://www.cnblogs.com/ittinybird/p/4435210.html
Copyright © 2011-2022 走看看