zoukankan      html  css  js  c++  java
  • LeetCode | 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?

    /**
     * Definition for singly-linked list.
     * class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) {
     *         val = x;
     *         next = null;
     *     }
     * }
     */

     //思路:
    首先利用快慢双指针向后遍历(slow每次向后一格,fast每次向后两格),当两个指针重合时,则list中一定存在cycle
    然后让fast_pointer停在两指针相遇的位置,而让slow_pointer回到head,让两指针同步的每次向后遍历一格,则两指针相遇的node即为cycle begin的node(有点像单纯的智力题。。。)

    public class Solution {
        public ListNode detectCycle(ListNode head) {
            if(head==null || head.next==null) return null;
            
            ListNode slow_pointer = head;
            ListNode fast_pointer = head;
            
            boolean hasCycle = false;
            while(fast_pointer!=null && fast_pointer.next!=null){  //判断list中是否有cycle的存在,思路与昨天的题一样
                slow_pointer = slow_pointer.next;
                fast_pointer = fast_pointer.next.next;
                if(slow_pointer == fast_pointer){
                    hasCycle = true;
                    break;                //注意:此处要有break,否则两个pointer会在cycle中一直遍历下去,无限循环
                }
            }
            
            if(hasCycle){        
                slow_pointer = head;
                while(true){
                    if(slow_pointer == fast_pointer) return slow_pointer;
                    slow_pointer = slow_pointer.next;
                    fast_pointer = fast_pointer.next;
              //if(slow_pointer == fast_pointer) return slow_pointer;  注:判断的语句不能放在后边,不然当list中tail.next=head时会出错
                }
            }
            
            return null;
        }
    }



  • 相关阅读:
    frameset框架中frame页面间传递参数
    程序中呼叫Class(类)
    ASP.NET简化编辑界面 V2
    ASP.NET简化编辑界面
    DropDownList与TextBox互动
    首先判断是否有选择记录,再confirm用户确认删除
    Div Vertical Menu ver2
    Div Vertical Menu
    为文本框指定一个默认值
    轻量级更换类(Class)
  • 原文地址:https://www.cnblogs.com/dosmile/p/6444457.html
Copyright © 2011-2022 走看看