PHP实现找出链表中环的入口节点


Posted in PHP onJanuary 16, 2018

本文实例讲述了PHP实现找出链表中环的入口节点。分享给大家供大家参考,具体如下:

问题

一个链表中包含环,请找出该链表的环的入口结点。

解决思路

第一步,找环中相汇点。分别用p1,p2指向链表头部,p1每次走一步,p2每次走二步,直到p1==p2找到在环中的相汇点。
第二步,找环的入口。接上步,当p1==p2时,p2所经过节点数为2x,p1所经过节点数为x,设环中有n个节点,p2比p1多走一圈有2x=n+x; n=x;可以看出p1实际走了一个环的步数,再让p2指向链表头部,p1位置不变,p1,p2每次走一步直到p1==p2; 此时p1指向环的入口。(还没怎么懂)

实现代码

<?php
/*class ListNode{
  var $val;
  var $next = NULL;
  function __construct($x){
    $this->val = $x;
  }
}*/
function EntryNodeOfLoop($pHead)
{
  if($pHead == null || $pHead->next == null)
    return null;
  $p1 = $pHead;
  $p2 = $pHead;
  while($p2!=null && $p2->next!=null){
    $p1 = $p1->next;
    $p2 = $p2->next->next;
    if($p1 == $p2){
      $p2 = $pHead;
      while($p1!=$p2){
        $p1 = $p1->next;
        $p2 = $p2->next;
      }
      if($p1 == $p2)
        return $p1;
    }
  }
  return null;
}

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
PHP+DBM的同学录程序(5)
Oct 09 PHP
网络资源
Oct 09 PHP
从一个不错的留言本弄的mysql数据库操作类
Sep 02 PHP
认识并使用PHP超级全局变量
Jan 26 PHP
php中将时间差转换为字符串提示的实现代码
Aug 08 PHP
学习php设计模式 php实现访问者模式(Visitor)
Dec 07 PHP
php强制下载文件函数
Aug 24 PHP
php 数组处理函数extract详解及实例代码
Nov 23 PHP
php实现的mysqldb读写分离操作类示例
Feb 07 PHP
PHP编辑器PhpStrom运行缓慢问题
Feb 21 PHP
Yii2.0实现生成二维码功能实例
Oct 24 PHP
PHP登录验证功能示例【用户名、密码、验证码、数据库、已登陆验证、自动登录和注销登录等】
Feb 25 PHP
详解thinkphp中的volist标签
Jan 15 #PHP
thinkphp 中的volist标签在ajax操作中的特殊性(推荐)
Jan 15 #PHP
PHP7扩展开发之基于函数方式使用lib库的方法详解
Jan 15 #PHP
PHP7扩展开发之hello word实现方法详解
Jan 15 #PHP
基于 Swoole 的微信扫码登录功能实现代码
Jan 15 #PHP
详解PHP序列化和反序列化原理
Jan 15 #PHP
PHP使用两个栈实现队列功能的方法
Jan 15 #PHP
You might like
PHP中MVC模式的模板引擎开发经验分享
2011/03/23 PHP
php从右向左/从左向右截取字符串的实现方法
2011/11/28 PHP
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
php类的扩展和继承用法实例
2015/06/20 PHP
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
2008/12/29 Javascript
js实现常用排序算法
2016/08/09 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
js实现PC端根据IP定位当前城市地理位置
2017/02/22 Javascript
详解如何使用webpack在vue项目中写jsx语法
2017/11/08 Javascript
JavaScript的数据类型转换原则(干货)
2018/03/15 Javascript
vue 中的keep-alive实例代码
2018/07/20 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
layui-table表复选框勾选的所有行数据获取的例子
2019/09/13 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
python使用新浪微博api上传图片到微博示例
2014/01/10 Python
Python实现列表转换成字典数据结构的方法
2016/03/11 Python
python中itertools模块zip_longest函数详解
2018/06/12 Python
python+mysql实现学生信息查询系统
2019/02/21 Python
python把转列表为集合的方法
2019/06/28 Python
windows环境中利用celery实现简单任务队列过程解析
2019/11/29 Python
Python 实现递归法解决迷宫问题的示例代码
2020/01/12 Python
Python Tornado实现WEB服务器Socket服务器共存并实现交互的方法
2020/05/26 Python
Python pip使用超时问题解决方案
2020/08/03 Python
python pip如何手动安装二进制包
2020/09/30 Python
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
我看到了用指针调用函数的不同语法形式
2014/07/16 面试题
一套英文Java笔试题面试题
2016/04/21 面试题
语文教研活动总结
2014/07/02 职场文书
开发房地产协议书
2014/09/14 职场文书
出纳试用期自我鉴定范文
2014/09/16 职场文书
教师党的群众路线教育实践活动个人整改方案
2014/10/31 职场文书
实习协议书
2015/01/27 职场文书
倡议书格式及范文
2015/04/29 职场文书
一般纳税人申请报告
2015/05/18 职场文书
学生会主席任命书
2015/09/21 职场文书
Vue 打包后相对路径的引用问题
2022/06/05 Vue.js