zoukankan      html  css  js  c++  java
  • 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;
     *     }
     * }
     */
    public class Solution {
        public ListNode detectCycle(ListNode head) {
            if(head == null)
                return null;
            ListNode fast = head;
            ListNode slow = head;
            while(fast.next != null && fast.next.next != null){
                fast = fast.next.next;
                slow = slow.next;
                if(fast == slow){
                    break;
                }
            }
            
            if(fast.next == null || fast.next.next == null)
                return null;
                
           
                fast = head;
                while(fast != slow){
                    fast = fast.next;
                    slow = slow.next;
                }
                return fast;
           
        }
    }
  • 相关阅读:
    指针与数组名
    c语言指针函数与函数指针
    c语言结构体
    c语言
    c语言全局变量
    c语言函数传递数组
    c实例_挑战程序竞赛,蚂蚁
    c语言字符串实例
    安又琪-唱得响亮
    乡村爱情
  • 原文地址:https://www.cnblogs.com/RazerLu/p/3554151.html
Copyright © 2011-2022 走看看