链表如何判断有环,判断链表中是否有环代码

  链表如何判断有环,判断链表中是否有环代码

  Bm判断链表中是否有环

  知识点哈希双指针

  确定给定的链表中是否有环。如果有环,则返回true,否则返回false。

  数据范围:链表的长度,链表中任意节点的值满足

  需求:空间复杂度,时间复杂度

  输入分为两部分,第一部分是链表,第二部分表示是否有环,然后将组成的头节点传入函数。-1代表无循环,其他数字代表循环。解释这些参数只是为了方便读者自测和调试。在实际编程中,链表的头节点是读入的。

  例如,当输入{3,2,0,-4},1时,对应的链表结构如下图所示:

  可以看出,环的入口节点是从头节点开始的第一个节点(注:头节点是第0个节点),所以输出为真。

  示例1输入:

  {3,2,0,-4},1复制返回值:

  真实副本描述:

  第一部分{3,2,0,-4}表示一个链表,第二部分{1}表示从-4到位置1有一个链接(注意:头节点是位置0),也就是-4- 2,传入的头是一个有环的链表。返回true示例2输入:

  {1},-1副本返回值:

  虚假复印说明:

  第一部分{1}表示链表,-1表示非循环单链表,传入头为非循环单链表,返回false。示例3输入:

  {-1,-7,7,-4,19,6,-9,-5,-2,-5},6复制返回值:

  真实的

  解决方案想法:

  用快慢指针来判断。起始位置是head,慢指针每次前进一个节点,快指针前进两个节点。如果快指针和慢指针相等,说明存在循环。

  #包含位/标准数据。h

  结构列表节点

  {

  int val

  struct ListNode * next

  ListNode(int x) : val(x),next(nullptr)

  {

  }

  ListNode()=默认值;

  };

  bool hasCycle(ListNode *head)

  {

  if(head==nullptr head-next==nullptr)

  {

  返回false

  }

  自动慢=头;

  auto fast=头;

  而(快!=nullptr fast- next!=nullptr)

  {

  慢=慢-下一个;

  fast=fast-next-next;

  if(慢==快)

  {

  返回true

  }

  }

  返回true

  }

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: