首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >《链表篇》---环形链表II(返回节点)(中等)

《链表篇》---环形链表II(返回节点)(中等)

作者头像
用户11288958
发布2025-01-17 14:06:06
发布2025-01-17 14:06:06
1410
举报
文章被收录于专栏:学习学习

题目传送门

方法一:哈希表(与环形链表类似)

很容易就可以找到链表的相交位置。

代码语言:javascript
复制
public class Solution {
    public ListNode detectCycle(ListNode head) {
        if(head == null || head.next == null){
            return null;
        }

        Set<ListNode> visited = new HashSet<>();
        while(head != null){
            visited.add(head);
            head = head.next;
            if(visited.contains(head)){
                return head;
            }            
        }
        return null;
    }
}

方法二: 快慢指针

难点不在于判断是否是环形链表。而是返回相交节点。 我们要记住当快指针和慢指针相遇的时候。我们新建一个指针指向头结点。此时我们让头指针和慢指针同时往后走。那么他们一定会相遇。此时我们再返回头结点。

代码语言:javascript
复制
public class Solution {
    public ListNode detectCycle(ListNode head) {
        if(head == null || head.next == null){
            return null;
        }

        ListNode fast = head;
        ListNode slow = head;

        while(fast != null){
            if(fast.next != null){
                fast = fast.next.next;
            }else{
                return null;
            }
            slow = slow.next;

//当快指针和慢指针相遇的时候。
//我们新建一个指针指向头结点。此时我们让头指针和慢指针同时往后走。
//那么他们一定会相遇。此时我们再返回头结点。
            if(fast == slow){
                ListNode ptr = head;
                while(ptr != slow){
                    ptr = ptr.next;
                    slow = slow.next;
                }
                return ptr;
            }
        }
        return null;

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目传送门
  • 方法一:哈希表(与环形链表类似)
  • 方法二: 快慢指针
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档