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

力扣题解:142. 环形链表 II

在链表学习中,我们已经了解了单链表和双链表,两者的最后一个结点都会指向NULL;今天我们介绍的循环列表则不同,其末尾结点指向的这是链表中的一个结点。

循环链表是一种特殊类型的链表,其尾节点的指针指向头节点,形成一个闭环。与普通链表相比,它没有明确的结束节点,遍历时可无限循环。这种结构特别适合处理循环任务,如音频播放列表循环播放、任务调度等场景,能有效减少节点访问的边界检查,提高操作效率。

在循环链表的题目中,通常会涉及到两个问题:

1.如何判断该链表为循环链表

2.循环链表的循环入口位置。

力扣的142题就是循环链表题,以下是题解与代码:

1、快慢指针寻找是否有环,

1).我们声明两个指针,快指针每次向链表下方走两步,慢指针则走一步;

2).如果有环,则快指针先进入环,慢指针后进入环, 如果无环,则fast会走出循环判断条件,返回空

3).有环时,慢指针进入环后,快指针相对慢指针每次移动一格,也就是快指针会追上慢指针。

4).快指针在一圈内追上慢指针:如果慢指针走一圈,快指针则走了两圈,在这两圈内,快指针一定会与慢指针相遇,所以快指针在一圈内追上慢指针

5).两者相遇时、声明index记录该点。

2、如何判断环的起点

head到起点记为 x;起点到相遇点记为y;相遇点再到起点记为z; 则y+z为环长,

慢指针与快指针所走距离差两倍

x+y=n(y+z)

x=(n-1)(y+z)+z

也就是

入口距离=(n-1)圈长+相遇点到入口的距离

所以我们可以让index 与head同时出发,两者会同时到达入口,(该过程中index肯会绕环未知圈)

struct ListNode {
 int val;
 struct ListNode *next;
};
struct ListNode *detectCycle(struct ListNode *head)
{
    struct ListNode* fast=head,* slow=head;
    while (fast!=NULL&&fast->next!=NULL)
    {
        fast=fast->next->next;
        slow=slow->next;
        if (slow==fast)
        {
            struct ListNode* index;
            index=fast;
            while (index!=head)
            {
                index=index->next;
                head=head->next;
            }
            return index;
        }
    }
    return NULL;
}

 

 

http://www.dtcms.com/a/121741.html

相关文章:

  • 柳宗元经典的10首唐诗
  • 指定运行级别
  • 【补题】Educational Codeforces Round 150 (Rated for Div. 2) C. Ranom Numbers
  • 计算机中的单位
  • 基于php扩展加密的一个简单逆向
  • 深入 C++ 线程库:从创建到同步的探索之旅
  • 天基光学图像仿真原理简介
  • 一个很好用的vue2在线签名组件
  • 《系统分析师-基础篇-7-9章总结》
  • 嵌入式AI前沿:精选工具与应用网站解析
  • 25/4/9 算法笔记 DBGAN+强化学习+迁移学习实现青光眼图像去模糊1
  • CSS Grid布局:从入门到放弃再到真香
  • CF442A Borya and Hanabi
  • latex模板文件
  • VTK随笔十四:QT与VTK的交互示例(平移)
  • Docker多阶段构建深度优化指南:从GB到MB的镜像瘦身革命
  • 【C语言】浮点数在内存的储存
  • Element Plus 组件库二次封装在ZKmall商城的实践与沉淀
  • 2.4GHz射频前端噪声系数优化架构
  • 内存分配中的堆(Memory Heap)详解
  • C++类成员内存分布详解
  • Android 11 (API 30) 及更高版本中,查询的特定应用商店包,无需动态请求权限处理
  • MyBatis 详解及代码示例
  • 机器学习--数据填充
  • 楼宇自控系统构建机电设备管理新方式,提升建筑管理水平
  • 【C++进阶】关联容器:set类型
  • Python 3.x cxfreeze打包exe教程
  • LeetCode 解题思路 35(Hot 100)
  • 如何理解KMP算法中的next数组
  • 气象水文耦合模式 WRF-Hydro 建模技术与案例实践应用