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 错误之引号中使用变量
May 04 PHP
php is_file 判断给定文件名是否为一个正常的文件
May 10 PHP
php设计模式 State (状态模式)
Jun 26 PHP
php代码收集表单内容并写入文件的代码
Jan 29 PHP
PHP正确解析UTF-8字符串技巧应用
Nov 07 PHP
利用php实现禁用IE和火狐的缓存问题
Dec 03 PHP
基于php上传图片重命名的6种解决方法的详细介绍
Apr 28 PHP
ThinkPHP令牌验证实例
Jun 18 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
Jun 19 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
Jul 28 PHP
php实现微信公众平台账号自定义菜单类
Dec 02 PHP
php批量添加数据与批量更新数据的实现方法
Dec 16 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
SONY SRF-40W电路分析
2021/03/02 无线电
新版PHP将向Java靠拢
2006/10/09 PHP
php Http_Template_IT类库进行模板替换
2009/03/19 PHP
PHP采集相关教程之一 CURL函数库
2010/02/15 PHP
ThinkPHP分页类使用详解
2014/03/05 PHP
php使用CURL不依赖COOKIEJAR获取COOKIE的方法
2015/06/17 PHP
PHP中的常见魔术方法功能作用及用法实例
2015/07/01 PHP
为Extjs加加速(javascript加速)
2010/08/19 Javascript
js实现拖拽 闭包函数详细介绍
2012/11/25 Javascript
javaScript中Math()函数注意事项
2015/06/18 Javascript
JavaScript 性能优化小结
2015/10/12 Javascript
对javascript继承的理解
2016/10/11 Javascript
浅谈nodejs中的类定义和继承的套路
2017/07/26 NodeJs
JS实现的tab页切换效果完整示例
2018/12/18 Javascript
小程序和web画三角形实现解析
2019/09/02 Javascript
微信小程序授权登陆及每次检查是否授权实例代码
2019/09/18 Javascript
微信小程序实现多选框全选与反全选及购物车中删除选中的商品功能
2019/12/17 Javascript
2分钟实现一个Vue实时直播系统的示例代码
2020/06/05 Javascript
Node快速切换版本、版本回退(降级)、版本更新(升级)
2021/01/07 Javascript
详解Python的Django框架中的Cookie相关处理
2015/07/22 Python
django批量导入xml数据
2016/10/16 Python
Python中字典的setdefault()方法教程
2017/02/07 Python
python生成词云的实现方法(推荐)
2017/06/13 Python
Python实现小数转化为百分数的格式化输出方法示例
2017/09/20 Python
python使用Plotly绘图工具绘制气泡图
2019/04/01 Python
Django--权限Permissions的例子
2019/08/28 Python
python数据分析:关键字提取方式
2020/02/24 Python
HTML5 Canvas实现放大镜效果示例
2020/03/25 HTML / CSS
英国计算机产品零售商:Novatech(定制个人电脑、笔记本电脑、工作站和服务器)
2018/01/28 全球购物
英国时尚配饰、珠宝和服装网站:KJ Beckett
2020/01/23 全球购物
大三毕业自我鉴定
2014/01/15 职场文书
铲车司机岗位职责
2014/03/15 职场文书
小学师德师风演讲稿
2014/09/02 职场文书
运动会通讯稿100字
2015/07/20 职场文书
vue-element-admin项目导入和导出的实现
2021/05/21 Vue.js
利用js实现简单开关灯代码
2021/11/23 Javascript