前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >leetcode刷题(38)——142. 环形链表 II

leetcode刷题(38)——142. 环形链表 II

作者头像
老马的编程之旅
发布2022-06-22 13:34:11
1820
发布2022-06-22 13:34:11
举报
文章被收录于专栏:深入理解Android

给定一个链表,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。

为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。

说明:不允许修改给定的链表。

示例 1:

输入:head = [3,2,0,-4], pos = 1 输出:tail connects to node index 1 解释:链表中有一个环,其尾部连接到第二个节点。

解法1:还是先用快慢指针找出是否是环形链表,同时记住停下来的节点fast,然后另一个指针从头节点开始出发,2个指针都移动1步,最后相遇的地方的节点就是环形链表的开始

代码语言:javascript
复制
public class Solution {
    public ListNode detectCycle(ListNode head) {
           if(head==null){
                return null;
            }
            ListNode in = getIntersect(head);
            if (in==null){
                return null;
            }
            ListNode p1 = head;
            ListNode p2 = in;
            while (p1!=p2){
                p1=p1.next;
                p2=p2.next;
            }
            return p1;

    }
    
     private ListNode getIntersect(ListNode head){
            ListNode fast = head;
            ListNode slow = head;
            while (fast!=null&&fast.next!=null){
                fast = fast.next.next;
                slow = slow.next;
                if (fast==slow){
                    return fast;
                }
            }
            return null;
        }
}

需要注意几个点: 1.抽象出getIntersect方法来获取快的ListNode 2.getIntersect方法返回的对象需要判空

代码语言:javascript
复制
  ListNode in = getIntersect(head);
            if (in==null){
                return null;
            }

解法2:使用set集合存放经历过的节点,循环中第一个在set里的节点一定是环形的入口

代码语言:javascript
复制
public class Solution {
    public ListNode detectCycle(ListNode head) {
          Set<ListNode> visited = new HashSet<ListNode>();

        ListNode node = head;
        while (node != null) {
            if (visited.contains(node)) {
                return node;
            }
            visited.add(node);
            node = node.next;
        }

        return null;

    }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-01-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档