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 相关文章推荐
最省空间的计数器
Oct 09 PHP
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Nov 26 PHP
php preg_filter执行一个正则表达式搜索和替换
Feb 27 PHP
深入解析php之apc
May 15 PHP
php针对cookie操作的队列操作类实例
Dec 10 PHP
PHP实现XML与数据格式进行转换类实例
Jul 29 PHP
[原创]php简单防盗链验证实现方法
Jul 09 PHP
PHP自定义多进制的方法
Nov 03 PHP
thinkPHP自动验证机制详解
Dec 05 PHP
laravel手动创建数组分页的实现代码
Jun 07 PHP
php输出控制函数和输出函数生成静态页面
Jun 27 PHP
Laravel 简单实现Ajax滚动加载示例
Oct 22 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
第1次亲密接触PHP5(1)
2006/10/09 PHP
php getimagesize 上传图片的长度和宽度检测代码
2010/05/15 PHP
php验证码的制作思路和实现方法
2015/11/12 PHP
JS中获取数据库中的值的方法
2013/07/14 Javascript
跟我学习javascript的隐式强制转换
2015/11/16 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
使用vue.js制作分页组件
2016/06/27 Javascript
Element UI 自定义正则表达式验证方法
2018/09/04 Javascript
快速了解Node中的Stream流是什么
2019/02/13 Javascript
利用Angular7开发一个Radio组件的全过程
2019/07/11 Javascript
vue实现放大镜效果
2020/09/17 Javascript
[02:45]2016年中国刀塔全程回顾,完美“圣”典即将上演
2016/12/15 DOTA
[03:36]DOTA2完美大师赛coL战队趣味视频——我演你猜
2017/11/23 DOTA
python操作摄像头截图实现远程监控的例子
2014/03/25 Python
在Linux中通过Python脚本访问mdb数据库的方法
2015/05/06 Python
详解python eval函数的妙用
2017/11/16 Python
Python RabbitMQ消息队列实现rpc
2018/05/30 Python
django框架实现一次性上传多个文件功能示例【批量上传】
2019/06/19 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
解决Python安装cryptography报错问题
2020/09/03 Python
浅谈matplotlib默认字体设置探索
2021/02/03 Python
限量版运动鞋和街头服饰:TheDrop
2020/09/06 全球购物
美国领先的宠物用品和宠物食品零售商:Petco
2020/10/28 全球购物
linux面试题参考答案(5)
2014/09/01 面试题
介绍一下javax.servlet.Servlet接口及其主要方法
2015/11/30 面试题
自荐信的禁忌和要点
2013/10/15 职场文书
初中生期末评语大全
2014/04/24 职场文书
中华魂演讲稿
2014/05/13 职场文书
三八节祝酒词
2015/08/11 职场文书
2016学校先进党组织事迹材料
2016/02/29 职场文书
小学生作文之《压岁钱的烦恼》
2019/09/27 职场文书
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
MySQL非空约束(not null)案例讲解
2021/08/23 MySQL
动画《平凡职业成就世界最强》宣布制作OVA
2022/04/01 日漫
python中mongodb包操作数据库
2022/04/19 Python
Win10服务主机占用内存怎么办?Win10服务主机进程占用大量内存解决方法
2022/09/23 数码科技