博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[PHP] 算法-请找出带环链表的环的入口结点的PHP实现
阅读量:6007 次
发布时间:2019-06-20

本文共 2426 字,大约阅读时间需要 8 分钟。

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

 

转载地址:http://zrsmx.baihongyu.com/

你可能感兴趣的文章
凡是可能出错的事必定会出错
查看>>
linux上安装mysql,亲试成功
查看>>
Partition List leetcode
查看>>
Java并发(基础知识)—— 创建、运行以及停止一个线程
查看>>
【转】不懂得使用工具的测试不是好测试
查看>>
JMeter基础之-使用技巧
查看>>
获取post传输参数
查看>>
ASP生成静态页面的方法
查看>>
使用递归从数据库读取数据来动态建立菜单
查看>>
mysql 权限
查看>>
HDU 1325 Is It A Tree? 判断是否为一棵树
查看>>
[原]linux 配置 ssh 等效性
查看>>
51nod 1052 (dp)
查看>>
《ListBox》———设计预览效果
查看>>
我的前端工具集(二)文件上传的封装
查看>>
不要被懒惰夺走你的思考能力
查看>>
Python 序列化
查看>>
AngularJS依赖注入
查看>>
正则的一个坑
查看>>
OpenCV学习之阈值化
查看>>