当前位置: 首页 > article >正文

LeetCode142. 环形链表 II(2024秋季每日一题 28)

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

如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。

不允许修改 链表。

示例 1:

在这里插入图片描述

输入:head = [3,2,0,-4], pos = 1
输出:返回索引为 1 的链表节点
解释:链表中有一个环,其尾部连接到第二个节点。

示例 2:

在这里插入图片描述

输入:head = [1,2], pos = 0
输出:返回索引为 0 的链表节点
解释:链表中有一个环,其尾部连接到第一个节点。

示例 3:
在这里插入图片描述

输入:head = [1], pos = -1
输出:返回 null
解释:链表中没有环。

提示:

链表中节点的数目范围在范围 [0, 104] 内
− 1 0 5 < = N o d e . v a l < = 1 0 5 -10^5 <= Node.val <= 10^5 105<=Node.val<=105
pos 的值为 -1 或者链表中的一个有效索引

进阶: 你是否可以使用 O(1) 空间解决此题?


思路:

    1. 哈希
    1. 快慢指针

官方题解

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode *detectCycle(ListNode *head) {
        ListNode * slow = head, * fast = head;
        while(fast != NULL){
            slow = slow -> next;
            fast = fast -> next;
            if(fast == NULL) return NULL;
            fast = fast->next;
            if(fast == slow){
                ListNode * pre = head;
                while(pre != slow){
                    pre = pre -> next;
                    slow = slow -> next;
                }
                return pre;
            }
        }
        return NULL;
    }
};

http://www.kler.cn/a/321544.html

相关文章:

  • 【Rust 编程语言工具】rustup-init.exe 安装与使用指南
  • 【问卷调研】HarmonyOS SDK开发者社区用户需求有奖调研
  • 玩转ChatGPT:文献阅读 v2.0
  • 进入未来城:第五周游戏指南
  • vue2使用 <component> 标签动态渲染不同的表单组件
  • 写给初学者的React Native 全栈开发实战班
  • 付费和免费代理IP工具的区别大吗?
  • 深度学习中的正则化和归一化
  • JWT令牌技术介绍及使用
  • Spring事务和AOP
  • 文件上传、重定向、Gin路由
  • 融云音视频RTC介绍
  • 六、设计模式-6.1、单例模式
  • 显示技术概念极简理解(分辨率、英寸、PPI、DPI)
  • IDEA Dependency Analyzer 分析 maven 项目包的依赖
  • Python 使用selenium 4.25 进行爬虫(1)
  • 一文读懂电路中VCC、VDD、VEE、VSS的区别
  • YOLOv8改进 - 注意力篇 - 引入SK网络注意力机制
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-26
  • 了解网络的相关信息
  • 从0开始linux(5)——vim
  • 微信小程序-canvas
  • go语言网络编程
  • 【Linux 从基础到进阶】Kafka消息队列配置与管理
  • C/C++中的内存管理
  • c语言200例 063 信息查询