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获取mysql版本的几种方法小结
Mar 25 PHP
解析php二分法查找数组是否包含某一元素
May 23 PHP
解析用PHP实现var_export的详细介绍
Jun 20 PHP
Fedora下安装php Redis扩展笔记
Sep 03 PHP
页面利用渐进式JPEG来提升用户体验度
Dec 01 PHP
php保存信息到当前Session的方法
Mar 16 PHP
PHP判断JSON对象是否存在的方法(推荐)
Jul 06 PHP
利用PHP命令行模式采集股票趋势信息
Aug 09 PHP
深入浅出讲解:php的socket通信原理
Dec 03 PHP
PHP基于新浪IP库获取IP详细地址的方法
May 04 PHP
thinkphp5 URL和路由的功能详解与实例
Dec 26 PHP
php如何比较两个浮点数是否相等详解
Feb 12 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实现专业获取网站SEO信息类实例
2015/04/02 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
firefox中JS读取XML文件
2006/12/21 Javascript
表单JS弹出填写提示效果代码
2011/04/16 Javascript
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
js导入导出excel(实例代码)
2013/11/25 Javascript
JavaScript格式化日期时间的方法和自定义格式化函数示例
2014/04/04 Javascript
JavaScript对象之深度克隆介绍
2014/12/08 Javascript
node.js中的fs.fchown方法使用说明
2014/12/16 Javascript
高性能JavaScript模板引擎实现原理详解
2015/02/05 Javascript
JavaScript测试工具之Karma-Jasmine的安装和使用详解
2015/12/03 Javascript
JavaScript常见的五种数组去重的方式
2016/12/15 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
详解vue与后端数据交互(ajax):vue-resource
2017/03/16 Javascript
React组件对子组件children进行加强的方法
2019/06/23 Javascript
vuex存取值和映射函数使用说明
2020/07/24 Javascript
[47:52]DOTA2-DPC中国联赛正赛 iG vs LBZS BO3 第二场 3月4日
2021/03/11 DOTA
python同时给两个收件人发送邮件的方法
2015/04/30 Python
Python中处理字符串之endswith()方法的使用简介
2015/05/18 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
2018/01/02 Python
完美解决在oj中Python的循环输入问题
2018/06/25 Python
python实现nao机器人手臂动作控制
2019/04/29 Python
10个python爬虫入门实例(小结)
2020/11/01 Python
CSS3实现同时执行倾斜和旋转的动画效果
2016/10/27 HTML / CSS
物理教育专业毕业生推荐信
2013/11/03 职场文书
小学生家长评语大全
2014/02/10 职场文书
优秀学生评语大全
2014/04/25 职场文书
党员批评与自我批评思想汇报
2014/10/08 职场文书
2014年团总支工作总结
2014/11/21 职场文书
先进工作者事迹材料
2014/12/23 职场文书
2015年小学师德师风建设工作总结
2015/10/23 职场文书
如何书写读后感?(附范文)
2019/07/26 职场文书
浅谈golang 中time.After释放的问题
2021/05/05 Golang
详解Java实现设计模式之责任链模式
2021/06/23 Java/Android
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS