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 相关文章推荐
LotusPhp笔记之:基于ObjectUtil组件的使用分析
May 06 PHP
php解析html类库simple_html_dom(详细介绍)
Jul 05 PHP
PHP中__FILE__、dirname与basename用法实例分析
Dec 01 PHP
10个php函数实用却不常见
Oct 13 PHP
PHP中文竖排转换实现方法
Oct 23 PHP
PHP的Yii框架入门使用教程
Feb 15 PHP
PHP如何使用Memcached
Apr 05 PHP
php实现的中文分词类完整实例
Feb 06 PHP
PHP基于简单递归函数求一个数阶乘的方法示例
Apr 26 PHP
php对xml文件的增删改查操作实现方法分析
May 19 PHP
php中青蛙跳台阶的问题解决方法
Oct 14 PHP
YII2框架中查询生成器Query()的使用方法示例
Mar 18 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生成缩略图示例代码分享(使用gd库实现)
2014/01/20 PHP
php操作mysql数据库的基本类代码
2014/02/25 PHP
CI框架开发新浪微博登录接口源码完整版
2014/05/28 PHP
Yii框架登录流程分析
2014/12/03 PHP
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
php数组随机排序实现方法
2015/06/13 PHP
Yii2配置Nginx伪静态的方法
2017/05/05 PHP
PHP简单实现二维数组赋值与遍历功能示例
2017/10/19 PHP
免费空间广告万能消除代码
2006/09/04 Javascript
初学Jquery插件制作 在SageCRM的查询屏幕隐藏部分行的功能
2011/12/26 Javascript
onkeydown事件解决按回车键直接提交数据的需求
2013/04/11 Javascript
一个支持任意尺寸的图片上下左右滑动效果
2014/08/24 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
jQuery Mobile 和 Kendo UI 的比较
2016/05/05 Javascript
echart简介_动力节点Java学院整理
2017/08/11 Javascript
js + css实现标签内容切换功能(实例讲解)
2017/10/09 Javascript
webpack配置之后端渲染详解
2017/10/26 Javascript
node基于puppeteer模拟登录抓取页面的实现
2018/05/09 Javascript
vue项目设置scrollTop不起作用(总结)
2018/12/21 Javascript
浅谈实现在线预览PDF的几种解决办法
2020/08/10 Javascript
vue项目实现多语言切换的思路
2020/09/17 Javascript
Javascript异步流程控制之串行执行详解
2020/09/27 Javascript
详解C++编程中一元运算符的重载
2016/01/19 Python
深入理解NumPy简明教程---数组3(组合)
2016/12/17 Python
Python中拆分字符串的操作方法
2019/07/23 Python
python dumps和loads区别详解
2020/02/04 Python
法国一家多品牌成衣精品中/高档商店:Graduate Store
2019/08/28 全球购物
事业单位辞职信范文
2014/01/19 职场文书
创先争优公开承诺书
2014/08/30 职场文书
保卫工作个人总结
2015/03/03 职场文书
民主生活会意见
2015/06/05 职场文书
家访教师心得体会
2016/01/23 职场文书
教你用Java Swing实现自助取款机系统
2021/06/11 Java/Android
React forwardRef的使用方法及注意点
2021/06/13 Javascript
Vue监视数据的原理详解
2022/02/24 Vue.js
解决Springboot PostMapping无法获取数据的问题
2022/05/06 Java/Android