zoukankan      html  css  js  c++  java
  • Linked List Cycle I & II

    题目:

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

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

    思路: 

    We can use two pointers: walker and runner. walker move one step at a time. runner move two steps. If there is a cycle, walker and runner will keep running in the cycle. And runner will catch up walker at last.

     1     public boolean hasCycle(ListNode head) {
     2         if (head == null || head.next == null) {
     3             return false;
     4         }
     5         ListNode walker = head;
     6         ListNode runner = head.next;
     7         while (runner != null && runner.next != null) {
     8             if (walker.val == runner.val) {
     9                 return true;
    10             }
    11             walker = walker.next;
    12             runner = runner.next.next;
    13         }
    14         return false;
    15     }

     For Linked List Cycle II, I have a solution, but have no idea why it is not working....Any idea?

     1     public ListNode detectCycle(ListNode head) {
     2         if (head == null) {
     3             return null;
     4         }
     5         ListNode walker = head;
     6         ListNode runner = head;
     7         ListNode meet = null;
     8         
     9         while (runner != null && runner.next != null) {
    10             walker = walker.next;
    11             runner = runner.next.next;
    12             
    13             if (runner == walker) {
    14                 meet = walker;
    15                 break;
    16             }
    17         }
    18         
    19         if (meet == null) {
    20             return null;
    21         }
    22         
    23         walker = head;
    24         while (true) {
    25             if (runner == walker) {
    26                 return walker;
    27             }
    28             runner = runner.next;
    29             walker = walker.next;
    30         }
    31     }
  • 相关阅读:
    jQuery学习----简单介绍,基本使用,操作样式,动画
    JavaScript进阶----关于数字的方法,Math对象,日期对象,定时器,函数,for in
    MR的常用命令
    YARN的三种调度器
    yarn资源管理
    yarn的架构设计
    yarn的web界面查看log时出现的问题
    HDFS副本放置策略
    HDFS读流程
    HDFS写流程
  • 原文地址:https://www.cnblogs.com/gonuts/p/4464810.html
Copyright © 2011-2022 走看看