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简单系统查询模块代码打包下载
Jun 07 PHP
PHP array_flip() 删除重复数组元素专用函数
May 16 PHP
PHP网站备份程序代码分享
Jun 10 PHP
解析php时间戳与日期的转换
Jun 06 PHP
PHP实现算式验证码和汉字验证码实例
Mar 09 PHP
分享ThinkPHP3.2中关联查询解决思路
Sep 20 PHP
THinkPHP获取客户端IP与IP地址查询的方法
Nov 14 PHP
PHP新特性之字节码缓存和内置服务器
Aug 11 PHP
基于PHP-FPM进程池探秘
Oct 17 PHP
浅析PHP数据导出知识点
Feb 17 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 PHP
php+js实现点赞功能的示例详解
Aug 07 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中$_SERVER的详细参数与说明
2008/07/29 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
2014/08/21 PHP
PHP的几个常用加密函数
2016/02/03 PHP
CodeIgniter生成静态页的方法
2016/05/17 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
PHP有序表查找之插值查找算法示例
2018/02/10 PHP
使用laravel的migrate创建数据表的方法
2019/09/30 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
使用JavaScript修改浏览器URL地址栏的实现代码
2013/10/21 Javascript
JsRender实用入门教程
2014/10/31 Javascript
js表格排序实例分析(支持int,float,date,string四种数据类型)
2015/05/06 Javascript
javascript实现根据时间段显示问候语的方法
2015/06/18 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
微信小程序实战之上拉(分页加载)效果(2)
2017/04/17 Javascript
基于vue监听滚动事件实现锚点链接平滑滚动的方法
2018/01/17 Javascript
小程序实现投票进度条
2019/11/20 Javascript
JS继承定义与使用方法简单示例
2020/02/19 Javascript
Web服务器框架 Tornado简介
2014/07/16 Python
详细讲解Python中的文件I/O操作
2015/05/24 Python
python实现的简单FTP上传下载文件实例
2015/06/30 Python
python使用socket创建tcp服务器和客户端
2018/04/12 Python
Python实现自动访问网页的例子
2020/02/21 Python
北美大型运动类产品商城:Champs Sports
2017/01/12 全球购物
Nayomi官网:沙特阿拉伯王国睡衣和内衣品牌
2020/12/19 全球购物
局域网定义和特性
2016/01/23 面试题
倡议书的写法
2014/08/30 职场文书
2014单位领导班子四风对照检查材料思想汇报
2014/09/25 职场文书
群众路线教师自我剖析材料
2014/09/29 职场文书
客房部经理岗位职责
2015/02/02 职场文书
物业保洁员岗位职责
2015/02/13 职场文书
签证工作证明模板
2015/06/15 职场文书
婚宴父母致辞
2015/07/27 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
Node实现搜索框进行模糊查询
2021/06/28 Javascript
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle