首页 > 其他 > 详细

142. 环形链表 II

时间:2020-05-07 16:34:05      阅读:75      评论:0      收藏:0      [点我收藏+]

 

 技术分享图片

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

 

思路:

(1)首先判断有没有环,把quick与slow设置为head

(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;
        }
    }
}

  

142. 环形链表 II

原文:https://www.cnblogs.com/lzh1043060917/p/12843561.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!