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     }
  • 相关阅读:
    JS---自己制作的选项卡
    CSS---左右固定,中间自适应布局
    Jquery Ajax示例---load,get,post方法
    JS---高级进阶
    JS---基础知识
    雅虎军规
    JS---setTimeout()与setInterval()的使用
    CSS3---绘制六边形
    CSS---CSS sprites的使用
    ARC(Automatic Reference Counting )技术概述
  • 原文地址:https://www.cnblogs.com/gonuts/p/4464810.html
Copyright © 2011-2022 走看看