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 相关文章推荐
在Windows中安装Apache2和PHP4的权威指南
Oct 09 PHP
使用php4加速网络传输
Oct 09 PHP
Linux下ZendOptimizer的安装与配置方法
Apr 12 PHP
站长助手-网站web在线管理程序 v1.0 下载
May 12 PHP
一个PHP数组应该有多大的分析
Jul 30 PHP
php下使用strpos需要注意 === 运算符
Jul 17 PHP
php 高性能书写
Dec 11 PHP
ThinkPHP验证码使用简明教程
Mar 05 PHP
PHP检测用户语言的方法
Jun 15 PHP
Zend Framework数据库操作方法实例总结
Dec 11 PHP
php双层循环(九九乘法表)
Oct 23 PHP
PHP基于DateTime类解决Unix时间戳与日期互转问题【针对1970年前及2038年后时间戳】
Jun 13 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
基于mysql的论坛(6)
2006/10/09 PHP
PHP+SQL 注入攻击的技术实现以及预防办法
2011/01/27 PHP
教你如何快捷的使用cmd访问mysql小技巧
2014/05/26 PHP
php去掉URL网址中带有PHPSESSID的配置方法
2014/07/08 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
PHP页面转UTF-8中文编码乱码的解决办法
2015/10/20 PHP
PHP中使用array函数新建一个数组
2015/11/19 PHP
php使用PDO执行SQL语句的方法分析
2017/02/16 PHP
PHP面向对象程序设计之构造方法和析构方法详解
2019/06/13 PHP
JavaScript中的eval()函数详解
2013/08/22 Javascript
原生javascript图片自动或手动切换示例附演示源码
2013/09/04 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
处理文本部分内容的TextRange对象应用实例
2014/07/29 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
Javascript中的对象和原型(二)
2016/08/12 Javascript
jQuery实现的简单拖动层示例
2017/02/22 Javascript
Vue开发中整合axios的文件整理
2017/04/29 Javascript
深入理解react-router@4.0 使用和源码解析
2017/05/23 Javascript
vue-cli中的webpack配置详解
2017/09/25 Javascript
关于react中组件通信的几种方式详解
2017/12/10 Javascript
vue3.0 CLI - 2.3 - 组件 home.vue 中学习指令和绑定
2018/09/14 Javascript
vue移动端写的拖拽功能示例代码
2020/09/09 Javascript
[01:25]DOTA2超级联赛专访iG 将调整状态找回自己
2013/06/05 DOTA
python远程登录代码
2008/04/29 Python
Python爬取数据并实现可视化代码解析
2020/08/12 Python
HTML5 LocalStorage 本地存储刷新值还在
2017/03/10 HTML / CSS
马来西亚太阳镜、眼镜和隐形眼镜网上商店:Focus Point
2018/12/13 全球购物
英国国家美术馆商店:National Gallery
2019/05/01 全球购物
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
中专生职业生涯规划书范文
2013/12/29 职场文书
献爱心标语
2014/06/21 职场文书
民事和解协议书格式
2014/11/29 职场文书
质检员岗位职责
2015/02/03 职场文书
2016党校培训心得体会
2016/01/07 职场文书
MySQL插入数据与查询数据
2022/03/25 MySQL
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript