zoukankan      html  css  js  c++  java
  • 142. Linked List Cycle II

    题目:

    Given a linked list, return the node where the cycle begins. If there is no cycle, return null.

    Follow up:
    Can you solve it without using extra space?

    Hide Tags
     Linked List Two Pointers
     

    链接: http://leetcode.com/problems/linked-list-cycle-ii/

    6/11/2017

    注意

    第11,12行没有放在第7行是为了排除第一次最开始slow, fast都在head的情况,但是也不应该在第7行判断是否2者当时是head,有可能环的起点就是head

     1 public class Solution {
     2     public ListNode detectCycle(ListNode head) {
     3         if (head == null) {
     4             return head;
     5         }
     6         ListNode slow = head, fast = head;
     7         while (fast != null && fast.next != null) {
     8             slow = slow.next;
     9             fast = fast.next;
    10             fast = fast.next;
    11             if (slow == fast) {
    12                 break;
    13             }
    14         }
    15         if (fast == null || fast.next == null) {
    16             return null;
    17         }
    18         fast = head;
    19         while (fast != slow) {
    20             fast = fast.next;
    21             slow = slow.next;
    22         }
    23         return fast;
    24     }
    25 }

    这道题应该是记下来的,但是分析不会

    加分析:

    相遇时slow走过的路程:a + nr + b

    相遇时fast走过的路程: 2*(a + nr + b) = a + mr + b

    a + b = kr

    所以当fast重新从head走的时候,两个指针相遇点就是环的起点。

    更多讨论

    https://discuss.leetcode.com/category/150/linked-list-cycle-ii

  • 相关阅读:
    codevs1080线段树练习
    NOIP2015 子串
    codevs1204 寻找子串位置
    字符串匹配的KMP算法
    TYVJ1460 旅行
    基础
    搜索
    二叉排序树
    二叉树
    poj
  • 原文地址:https://www.cnblogs.com/panini/p/6992009.html
Copyright © 2011-2022 走看看