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?

     思路:

    判断一个链表是否有环。
    * 同个时间Faster走的比Slower走的多。一般来说,Slower每次走一步,Faster每次走2步(通常这个概念可以判断链表中间点)。
    * 在这里,Faster和Slower同时从起点遍历链表,如果有环那么Slower和Faster肯定会相遇。
    * 快慢指针问题,设置两个ListNode, Faster = Slower = head;Slower.next = Slower.next;Faster.next = Faster.next.next;
    * 假设Faster确实把Slower超了而且他俩还没相遇(类似Faster一下迈了2步,Slower一下迈了一步,Faster超了Slower,但是俩人并没遇上)。
    * 那么就假设Faster现在在 i+1 位置而Slower在 i 位置。那么前一时刻,Slower肯定是在 i-1 位置,而Faster肯定在(i+1)-2位置,所以前一时刻,
    * 俩人都在 i-1 位置,相遇了。
    * 还有一种情况就是Faster在i+2位置而slower在i位置,那么前一时刻,Faster在i位置,而Slower在 i-1位置。
    * 这样问题又回归到上面那种情况了(再往前一时刻,Faster在i-2位置,Slower在i-1-1位置,相遇)。
    * 所以,这就证明Runner和Faster在有环的链表中肯定会相遇。

     1 /**
     2  * Definition for singly-linked list.
     3  * class ListNode {
     4  *     int val;
     5  *     ListNode next;
     6  *     ListNode(int x) {
     7  *         val = x;
     8  *         next = null;
     9  *     }
    10  * }
    11  */
    12 
    13 public class Solution141 {
    14      public boolean hasCycle(ListNode head) {
    15             if(head == null) return false;
    16             ListNode faster = head;
    17             ListNode slower = head;
    18             while(faster.next!=null && faster.next.next!=null){
    19                 faster = faster.next.next;
    20                 slower = slower.next;
    21                 if(faster==slower){
    22                     return true;
    23                 }
    24             }
    25             return false;
    26         }
    27     public static void main(String[] args) {
    28         // TODO Auto-generated method stub
    29 
    30     }
    31 
    32 }
  • 相关阅读:
    还原 | revert (Cascading & Inheritance)
    过滤器 | filter (Filter Effects)
    过渡时间 | transition-duration (Animations & Transitions)
    过渡延时 | transition-delay (Animations & Transitions)
    过渡属性 | transition-property (Animations & Transitions)
    过渡定时功能 | transition-timing-function (Animations & Transitions)
    过渡 | transition (Animations & Transitions)
    ProxySQL 读写分离
    《抛弃learning rate decay吧!》
    《Tensorflow 中 learning rate decay 的奇技淫巧 》
  • 原文地址:https://www.cnblogs.com/zlz099/p/8507540.html
Copyright © 2011-2022 走看看