zoukankan      html  css  js  c++  java
  • Leetcode——141——Linked List Cycle【java】

    keyword:快慢引用

    比如:

    fast:每次走两步

    slow:每次走一步

    如果链表有环,这俩货一定会相遇

    【至于为什么】---跑步时候快的慢的一定会扣圈的啊

     假设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在有环的链表中肯定会相遇。

    以上来自http://www.bubuko.com/infodetail-270933.html

    /**
     * Definition for singly-linked list.
     * class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) {
     *         val = x;
     *         next = null;
     *     }
     * }
     */
    public class Solution {
        public boolean hasCycle(ListNode head) {
           if (head == null) return false;
            
            ListNode slow = head, fast = head;
            while (fast.next != null && fast.next.next != null) {//这里保证了不会死循环····
                slow = slow.next;
                fast = fast.next.next;
                if (slow == fast) return true;
            }        
            return false;
            
        }
    }
  • 相关阅读:
    【Java每日一题】20170111
    【Java每日一题】20170110
    【Java每日一题】20170109
    【Java每日一题】20170106
    【Java每日一题】20170105
    【Java每日一题】20170104
    【Java每日一题】20170103
    【Java每日一题】20161230
    【Java每日一题】20161229
    【Java每日一题】20161228
  • 原文地址:https://www.cnblogs.com/Cherrylalala/p/6545234.html
Copyright © 2011-2022 走看看