给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null1.找链表倒数第k个结点,输入一个链表,输出该链表中倒数第k个结点。第一个指针走(k-1)步,到达第k个节点,两个指针同时往后移动,当第一个结点到达末尾的时候,第二个结点所在位置就是倒数第k个节点了2.原理有点像上面的,定义两个指针,一个是快指针每次走两步,一个是慢指针每次走一步,当两个相遇的时候,假设环的长度为n个结点,慢指针走x步,快指针走2x步,2x=x+kn ;x=kn; k暂时假定为1圈 ,也就是慢指针slow走了一个环的距离3.快指针回到头结点,慢指针原位置不动,两个每次都是走一步,当两个再次相遇的时候,就是在环入口;想象把环捋直,和倒数第k个结点很像了slow fast
while fast!=null && fast->next!=nullslow=slow->nextfast=fast->next->nextif slow==fastfast=headwhile slow!=fastslow=slow->nextfast=fast->nextif slow==fastreturn slow
return null

<?php
class Node{public $data;public $next;public function __construct($data=""){$this->data=$data;}
}
//构造一个带环的链表
$linkList=new Node();
$linkList->next=null;
$temp=$linkList;$node1=new Node("111");
$temp->next=$node1;
$temp=$node1;$node2=new Node("222");
$temp->next=$node2;
$temp=$node2;$node3=new Node("333");
$temp->next=$node3;
$temp=$node3;$node4=new Node("444");
$temp->next=$node4;
$node4->next=$node2;//尾结点指向第二个结点function EntryNodeOfLoop($pHead){$slow=$pHead;$fast=$pHead;while($fast!=null && $fast->next!=null){$slow=$slow->next;//慢指针走一步$fast=$fast->next->next;//快指针走两步//快慢指针环内相遇if($slow==$fast){//快指针回到头结点$fast=$pHead;//同一速度再同时走while($slow!=$fast){$slow=$slow->next;$fast=$fast->next;}   //两个相遇的点一定是环的入口if($slow==$fast){return $fast;}   }   }
}
var_dump($linkList);
$result=EntryNodeOfLoop($linkList);
var_dump($result);

object(Node)#1 (2) {["data"]=>string(0) ""["next"]=>object(Node)#2 (2) {["data"]=>string(3) "111"["next"]=>object(Node)#3 (2) {["data"]=>string(3) "222"["next"]=>object(Node)#4 (2) {["data"]=>string(3) "333"["next"]=>object(Node)#5 (2) {["data"]=>string(3) "444"["next"]=>*RECURSION*}}}}
}
object(Node)#3 (2) {["data"]=>string(3) "222"["next"]=>object(Node)#4 (2) {["data"]=>string(3) "333"["next"]=>object(Node)#5 (2) {["data"]=>string(3) "444"["next"]=>*RECURSION*}}
}

转载于:https://www.cnblogs.com/taoshihan/p/9631637.html

[PHP] 算法-请找出带环链表的环的入口结点的PHP实现相关推荐

  1. [转] 程序员面试题精选100题(35)-找出两个链表的第一个公共结点

    [转] http://hi.baidu.com/evrest/blog/item/bb9365fc7569378ab801a059.html 题目:两个单向链表,找出它们的第一个公共结点. 链表的结点 ...

  2. 请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素

    给定一个单向链表(长度未知),请设计一个既节省时间又节省空间的算法来找出该链表中的倒数第m个元素. 实现这个算法,并为可能出现的特例情况安排好处理措施. 倒数第m个元素"是这样规定的:当m= ...

  3. 给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高效的算法,找出数组中未出现的最小正整数。

    笔者初涉<算法设计与分析>这门专业课,在做一些算法设计题的过程中遇到一些小感悟,特此记录和大家分享. 下面直接给出算法题目: 给定一个含n(n≥1)个整数的数组,请设计一个在时间上尽可能高 ...

  4. 常考数据结构与算法----给定一个二叉树和一个值 sum,请找出所有的根节点到叶子节点的节点值之和等于sum 的路径,

    题目描述 给定一个二叉树和一个值sum,请找出所有的根节点到叶子节点的节点值之和等于sum 的路径, 例如: 给出如下的二叉树,sum=22, 返回 [ [5,4,11,2], [5,8,9] ] 示 ...

  5. 典型的Top K算法_找出一个数组里面前K个最大数

    原文 典型的Top K算法_找出一个数组里面前K个最大数...或找出1亿个浮点数中最大的10000个...一个文本文件,找出前10个经常出现的词,但这次文件比较长,说是上亿行或十亿行,总之无法一次读入 ...

  6. 通过深度优先算法来找出有向图的树边,后向边,前向边,横跨边

    **通过深度优先算法来找出有向图的树边,后向边,前向边,横跨边(Java实现) ** package graph;import java.io.IOException; import java.uti ...

  7. 巧妙算法:找出数组中消息的数字

    题目: 在一个长度为n的数组里的所有数字都在0~n-1的范围内.数组中某些数字是重复的,但是不知道有几个数字重复了,也不知道每个数字重复了几次.请找出数组中任意一个重复的数字.例如,如果输入长度为7, ...

  8. 数据结构第5章例题 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点。试编写一个算法,找出A中的所有鞍点。

    [例5.1] 若矩阵Am×n中存在某个元素aij满足:aij是第i行中的最小值且是第j列中的最大值,则称该元素为矩阵A的一个鞍点.试编写一个算法,找出A中的所有鞍点. 算法如下: void saddl ...

  9. 《剑指offer》给定一颗二叉搜索树,请找出其中的第k大的结点。

    题目:给定一颗二叉搜索树,请找出其中的第k大的结点.例如, 5 / \ 3 7 /\ /\ 2 4 6 8 中,按结点数值大小顺序第三个结点的值为4. 解析:看到我写的下面的代码,像一篇文章一样的长, ...

最新文章

  1. containerd镜像导入import和push命令 gzip压缩解压缩命令
  2. 数据结构开发(7):典型问题分析(Bugfix)
  3. TextView 多文字字体颜色及多事件监听
  4. java 格式化小数_java-如何格式化小数位数精度
  5. [1] SDK Tools安装
  6. iscsi多路径配置方式
  7. linux maven安装与入门
  8. THAAD反导必将部署,各方已接受事实
  9. 一篇述说“山寨”的文章,转过来大家看看。
  10. java $字符串替换_Java8字符串替换方法梳理
  11. 基于内容的图像检索系统设计与实现-java+mysql
  12. 阿里云MVP精选2018年终盘点:大咖专访+最佳实践,丰富干货等你来!...
  13. 2022-4-12作业
  14. 基于云的文档管理软件/文档管理系统(DMS)
  15. svg --- 可缩放矢量图形
  16. leetcode java 大厂基础面试题附答案(四)
  17. STM32F103步进电机驱动简单控制
  18. 台式计算机主板检测与维修,台式电脑主板故障怎么回事 台式电脑主板故障原因及诊断方法...
  19. 【完整记录】使用kubeadm部署kubernetes集群踩坑记录及解决方案
  20. 关于window10和爱剪辑软件的兼容出错问题。

热门文章

  1. PCB设计1 模块间的隔离
  2. 虚拟存储器与虚拟内存
  3. 趋势一次一单EA,不加仓不网格,每单带止损止盈,风险可控
  4. pytorch中的value, top = prob.topk(1, dim=1, largest=True, sorted=True)
  5. [ant design vue] 表单验证成功,提示信息不显示
  6. SVN客户端TortoiseSVN基本使用方法步骤-初人指南
  7. 打印服务spoolsv.exe应用程序错误解决方法
  8. 使用微软官方工具下载安装Windows10系统
  9. python - BeautifulSoup教程
  10. WiFI Display介绍