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

leetcode:环形链表

题目描述

题目链接:141. 环形链表 - 力扣(LeetCode)

题目分析

我们先了解一个知识:循环链表

尾结点不指向NULL,指向头就是循环链表

那么带环链表就意味着尾结点的next可以指向链表的任意一个结点,甚至可以指向他自己

这里我们的算法思路唯一靠谱的还是快慢指针

slow一次走一步,fast一次走两步,当slow走到中间的时候,fast一定入环了,如果fast指向NULL,则该链表无环

当slow再走一半也就入环了,这个时候,由于slow走的慢,fast走的快,所以fast和slow最终会相遇的

那我们的代码就应该是

如果fast或者fast->next为NULL则返回false

当fast或者fast->next不为NULL的时候,slow走一步,fast走两步,当fast==slow,则返回true

代码示例

根据思路我们就可以写代码了:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
bool hasCycle(struct ListNode *head) {
    struct ListNode *fast=head,*slow=head;
    while(fast&&fast->next)
    {
        slow=slow->next;
        fast=fast->next->next;
        if(slow==fast)
        {
            return true;
        }
    }
    return false;
}

当然结果也通过了


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

相关文章:

  • 机场安全项目|基于改进 YOLOv8 的机场飞鸟实时目标检测方法
  • Mac 安装 Flutter 提示 A network error occurred while checking
  • 原子类及原理和ABA问题解决
  • REMARK-LLM:用于生成大型语言模型的稳健且高效的水印框架
  • 【Vue】vue项目中命名规范(结合上一篇项目结构)
  • Linux驱动开发学习准备(Linux内核源码添加到工程-Workspace)
  • 【20年扬大真题】编写对数组求逆的递归算法
  • 什么是软件需求?以及需求的最佳实践?
  • ssm+vue的药店药品信息管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。
  • 代码随想录算法训练营|五十九~六十天
  • 执行npm的时候报权限问题的解决方案
  • 【前端学java】java 中的数组(9)
  • Java实现围棋算法
  • 短视频账号矩阵系统源码
  • 将数字每千分位用逗号隔开
  • echarts 中如何添加左右滚动条 数据如何进行堆叠如何配置那些数据使用那个数据轴
  • 为什么 Django 后台管理系统那么“丑”?
  • 广西柳州机械异形零部件三维扫描3D抄数全尺寸测绘建模-CASAIM中科广电
  • kubernetes学习-概念3
  • 函数有返回类型,但函数体未返回类型,程序崩溃问题记录
  • 【机器学习基础】K-Means聚类算法
  • Vue学习
  • LeetCode | 19. 删除链表的倒数第 N 个结点
  • QMenuBar和QToolBar使用同一个QAction
  • Vue Router的使用
  • 详解Python安装requests库的实例代码