• 142. 环形链表 II


     

     

     https://leetcode-cn.com/problems/linked-list-cycle-ii/solution/huan-xing-lian-biao-ii-by-leetcode/

    思路:

    (1)首先判断有没有环,把quick与slow设置为head,当满足2的条件时,slow每次移动一个单位,quick每次移动二个单位

    (2)当quick!=null&&quick.next!=null时,进行循环(null的next会报错,所以只能用判断快指针的方式,判断循环应不应该继续,有没有环)

    (3)假设没环,返回null,有环,

    阶段 2

    给定阶段 1 找到的相遇点,阶段 2 将找到环的入口。首先我们初始化额外的两个指针: ptr1 ,指向链表的头, ptr2 指向相遇点。然后,我们每次将它们往前移动一步,直到它们相遇,它们相遇的点就是环的入口,返回这个节点。

     用这个图自己试一下就行,亲测可以

    /**
     * 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 slow=head;
            ListNode quick=head;
            boolean a=false;//是否有环
            while(quick!=null&&quick.next!=null)//判断条件注意,null的next会报错
            {
                slow=slow.next;
                quick=quick.next.next;
                if(slow==quick)
                {
                    a=true;//有环
                    break;
                }
            }
            if(a)
            {
                 ListNode h=head;
                while(h!=quick)
                {
                    h=h.next;
                    quick=quick.next;
                }
                return quick;
            }
            else
            {
                return null;
            }
        }
    }
    

      

  • 相关阅读:
    iOS设备后台播放音乐方法
    iOS 编译64位FFMPEG
    os8 location authorization 错误.
    IOS 使用新浪微博SDK
    IOS 解析歌词lrc
    IOS 通过button获取cell
    IOS 解析XML文档
    OC .(点)与->(箭头)用法区别
    黑苹果安装合集
    Hello,World
  • 原文地址:https://www.cnblogs.com/lzh1043060917/p/12843561.html
Copyright © 2020-2023  润新知