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+javascript模拟Matrix画面
Oct 09 PHP
用PHP写的MySQL数据库用户认证系统代码
Mar 22 PHP
PHP 伪静态隐藏传递参数名的四种方法
Feb 22 PHP
PHP企业级应用之常见缓存技术篇
Jan 27 PHP
php中如何防止表单的重复提交
Aug 02 PHP
php json_encode()函数返回json数据实例代码
Oct 10 PHP
利用php输出不同的心形图案
Apr 22 PHP
PHP扩展框架之Yaf框架的安装与使用
May 18 PHP
[原创]php求圆周率的简单实现方法
May 30 PHP
PHP实现页面静态化的超简单方法
Sep 06 PHP
深入了解PHP中的Array数组和foreach
Nov 06 PHP
Docker 安装 PHP并与Nginx的部署实例讲解
Feb 27 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
header()函数使用说明
2006/11/23 PHP
php调用mysql数据 dbclass类
2011/05/07 PHP
CodeIgniter采用config控制的多语言实现根据浏览器语言自动转换功能
2014/07/18 PHP
AJAX使用了UpdatePanel后无法使用alert弹出脚本
2010/04/02 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
nodeType属性返回被选节点的节点类型介绍
2013/11/22 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
js clearInterval()方法的定义和用法
2015/11/11 Javascript
基于jquery插件编写countdown计时器
2016/06/12 Javascript
JS正则表达式验证账号、手机号、电话和邮箱是否合法
2017/03/08 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
Next.js项目实战踩坑指南(笔记)
2018/11/29 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
jQuery使用jsonp实现百度搜索的示例代码
2020/07/08 jQuery
学习 Vue.js 遇到的那些坑
2021/02/02 Vue.js
Python实现全角半角转换的方法
2014/08/18 Python
Python中的pass语句使用方法讲解
2015/05/14 Python
Python科学画图代码分享
2017/11/29 Python
python如何将图片转换为字符图片
2020/08/19 Python
pygame实现俄罗斯方块游戏
2018/06/26 Python
selenium+python自动化测试之页面元素定位
2019/01/23 Python
英国第一蛋白粉品牌:Myprotein
2016/09/14 全球购物
Nice Kicks网上商店:ShopNiceKicks.com
2018/12/25 全球购物
北京振戎融通Java面试题
2015/09/03 面试题
护士辞职信模板
2014/01/20 职场文书
劳动之星获奖感言
2014/02/01 职场文书
奠基仪式主持词
2014/03/20 职场文书
企业委托书范本
2014/09/13 职场文书
警察群众路线整改措施
2014/09/26 职场文书
小学一年级数学教学计划
2015/01/20 职场文书
无保留意见审计报告
2015/06/05 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
职工趣味运动会开幕词
2016/03/04 职场文书
HTML5中 rem适配方案与 viewport 适配问题详解
2021/04/27 HTML / CSS
Python 数据可视化神器Pyecharts绘制图像练习
2022/02/28 Python
Java9新特性对HTTP2协议支持与非阻塞HTTP API
2022/03/16 Java/Android