环路链表检测

给定一个链表,如果它是有环链表,实现一个算法返回环路的开头节点。

有环链表的定义:在链表中某个节点的next元素指向在它前面出现过的节点,则表明该链表存在环路。

解题思路 1

遍历链表,同时将每次的结果放到 map 中,如果有元素重复出现,则是有环形链表

代码/**

* Definition for singly-linked list.

* type ListNode struct {

* Val int

* Next *ListNode

* }

*/

func detectCycle(head *ListNode) *ListNode {

visited := make(map[*ListNode]struct{}, 1)

work := head

for work != nil {

_, ok := visited[work]

if ok {

return work

} else {

visited[work] = struct{}{}

}

work = work.Next

}

return nil

}

解题思路 2

快慢指针求解:我们定义两个指针,一快一满。慢指针每次只移动一步,而快指针每次移动两步。初始时,慢指针在位置 head,而快指针在位置 head.next。这样一来,如果在移动的过程中,快指针反过来追上慢指针,就说明该链表为环形链表。否则快指针将到达链表尾部,该链表不为环形链表。/**

* Definition for a singly-linked list.

* class ListNode {

* public $val = 0;

* public $next = null;

* function __construct($val) { $this->val = $val; }

* }

*/

class Solution {

/**

* @param ListNode $head

* @return Boolean

*/

function hasCycle($head) {

$fast = $head;

$slow = $head;

while ($fast != null && $fast->next != null) {

$fast = $fast->next->next;

$slow = $slow->next;

if ($fast === $slow) {

return true;

}

}

return false;

}

}

php单链表检测有没有环,PHP 和 Go 实现环路链表检测相关推荐

  1. 判断单链表中的元素是否递增_检测单链表中是否有环(C语言)

    检测单链表中是否有环(C语言) 方法:双指针法思路 使用两个指针,两个初始时都指向链表的头结点,然后one指针一次加一,另一个two指针一次加二. 在链表有环时,two指针与one指针相等就说明有环. ...

  2. php单链表检测有没有环,PHP找出链表中环入口节点步骤详解

    这次给大家带来PHP找出链表中环入口节点步骤详解,PHP找出链表中环入口节点的注意事项有哪些,下面就是实战案例,一起来看一下. 问题 一个链表中包含环,请找出该链表的环的入口结点. 解决思路 第一步, ...

  3. 笔面集锦:判断单链表里面是否有环及相关扩展题

    源于网络 1.如何判断单链表里面是否有环? 设置两个指针(fast, slow),初始值都指向头,slow每次前进一步,fast每次前进二步,如果链表存在环,则fast必定先进入环,而slow后进入环 ...

  4. 判断一个单链表中是否有环

    思路:快慢指针实现 用两个指针,一个指针一次走一步,另一个指针一次走两步,如果存在环,则这两个指针会在环内相遇,时间复杂度为O(n) /*** 检测单链表中是否有环*/public static bo ...

  5. 给定单链表,检测是否有环等系列考题

    题一. 给定单链表,检测是否有环.         使用两个指针p1,p2从链表头开始遍历,p1每次前进一步,p2每次前进两步.如果p2到达链表尾部,说明无环,否则p1.p2必然会在某个时刻相遇(p1 ...

  6. 单链表——判断一个单链表中是否有环

    2019独角兽企业重金招聘Python工程师标准>>> package jxau.lyx.link;/*** * @author: liyixiang* @data:2014-10- ...

  7. 判断一个单链表中是否存在环

    #判断一个单链表中是否存在 环. #设置两个指针(fast, slow),初始值都指向头,slow每次前进1步,fast每次前进2步, 大概的思路如下: 如果链表存在环,则fast必定先进入环,而sl ...

  8. 如何判断链表有环、如何判断两个链表相交

    如何判断单链表是否存在环 有一个单向链表,链表当中有可能出现"环",就像题图这样.如何用程序判断出这个链表是有环链表? 不允许修改链表结构. 时间复杂度O(n),空间复杂度O(1) ...

  9. 经典面试题:链表的相交与环问题

    1. 给出两个单向链表的头指针pHead1和pHead2,判断这两个链表是否相交.假设两个链表均不带环.  示意图如下: 如果两个链表相交于某一节点,那么在这个相交节点之后的所有节点都是两个链表所共有 ...

最新文章

  1. 通过pipeline实现jenkins的ci/cd功能
  2. 如何查看linux系统的密码是多少,如何在Linux系统查询SAM密码
  3. 1.4激活函数-带隐层的神经网络tf实战
  4. 【codeforces】【比赛题解】#849 CF Round #431 (Div.2)
  5. python可视化编程实战代码_Python数据可视化编程实战——导入数据
  6. 【面试题37】两个链表的第一个公共结点
  7. Python执行Linux系统命令方法
  8. 微信小程序商城项目实战(第九篇:收货地址管理)
  9. HTTPS(一) -- 基础知识(密钥、对称加密、非对称加密、数字签名、数字证书)
  10. Win11亮度无法调节解决方法(在卸载驱动,关闭自适应亮度和修改注册表都行不通的情况下)
  11. TokenInsight 对话首席——智能法律合约,去中心化的法务、仲裁之路可否行通
  12. Modularity(模块性)
  13. java中什么是空指针异常_JAVA中的空指针异常如何处理?
  14. python 编辑距离_最小编辑距离(Levenshtein)的 Python 实现
  15. (四)双击放大与缩小图片
  16. magic4.0什么时候升级鸿蒙,科技知识:magic4.0什么时候更新 magic4.0更新时间介绍...
  17. php文件包含读源码,CTF PHP文件包含--session
  18. 扩展欧几里得算法求逆元---乘法密码
  19. 20岁就业难、30岁被裁员、35岁瓶颈期…打工人真的没有退路了吗
  20. 这可是全网eNSP安装最完整,最详细的图解,没有之一(常见问题)

热门文章

  1. linux 文件的列数,Linux 输出文件列数,拼接文件
  2. linux vim编辑器剪切,Linux下Vim编辑器访问系统剪切板
  3. TiDB数据库HTAP概述
  4. day1 计算机简史(概念)②
  5. DNS欺骗与钓鱼网站
  6. 面向对象的3个基本对象
  7. numpy.meshgrid()理解
  8. win10找不到oracle11g客户端,win10操做系统下oracle11g客户端/服务端的下载安装配置卸载总结...
  9. C++程序设计语言学习笔记:名字空间
  10. 景联文智能标注平台将数据处理效率提升十倍以上!数据精准度最高可达99%