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 相关文章推荐
NOT NULL 和NULL
Jan 15 PHP
使用php get_headers 判断URL是否有效的解决办法
Apr 27 PHP
php中将数组转成字符串并保存到数据库中的函数代码
Sep 29 PHP
php教程之魔术方法的使用示例(php魔术函数)
Feb 12 PHP
ThinkPHP实例化模型的四种方法概述
Aug 22 PHP
php结合js实现点击超链接执行删除确认操作
Oct 31 PHP
php面象对象数据库操作类实例
Dec 02 PHP
Yii 2.0中场景的使用教程
Jun 02 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
Jun 13 PHP
laravel-admin 实现在指定的相册下添加照片
Oct 21 PHP
解决PhpStorm64不能启动的问题
Jun 20 PHP
基于PHP实现解密或加密Cloudflar邮箱保护
Jun 24 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
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
用定制的PHP应用程序来获取Web服务器的状态信息
2006/10/09 PHP
PHP 全角转半角实现代码
2010/05/16 PHP
PHP 解决session死锁的方法
2013/06/20 PHP
php禁止浏览器使用缓存页面的方法
2014/11/07 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
使用PHP开发留言板功能
2019/11/19 PHP
PHP实现微信提现功能(微信商城)
2019/11/21 PHP
页面加载完毕后滚动条自动滚动一定位置
2014/02/20 Javascript
jQuery背景插件backstretch使用指南
2015/04/21 Javascript
jQuery中closest和parents的区别分析
2015/05/07 Javascript
在JavaScript中处理数组之reverse()方法的使用
2015/06/09 Javascript
微信公众平台开发教程(五)详解自定义菜单
2016/12/02 Javascript
深入理解Vue-cli搭建项目后的目录结构探秘
2017/07/13 Javascript
vue2.0 可折叠列表 v-for循环展示的实例
2018/09/07 Javascript
深入浅析vue-cli@3.0 使用及配置说明
2019/05/08 Javascript
Vue 动态添加路由及生成菜单的方法示例
2019/06/20 Javascript
微信小程序列表时间戳转换实现过程解析
2019/10/12 Javascript
javascript实现时钟动画
2020/12/03 Javascript
[06:11]2014DOTA2国际邀请赛 专访团结一心的VG战队
2014/07/21 DOTA
python实现可以断点续传和并发的ftp程序
2016/09/13 Python
Python贪吃蛇游戏编写代码
2020/10/26 Python
Python matplotlib的使用并自定义colormap的方法
2018/12/13 Python
Python PyInstaller库基本使用方法分析
2019/12/12 Python
python操作cfg配置文件方式
2019/12/22 Python
安装完Python包然后找不到模块的解决步骤
2020/02/13 Python
Python创建自己的加密货币的示例
2021/03/01 Python
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
New Balance比利时官方网站:购买鞋子和服装
2021/01/15 全球购物
西部世纪面试题
2014/12/05 面试题
英文导游欢迎词
2014/01/11 职场文书
党员转正党支部意见
2015/06/02 职场文书
课程设计感想范文
2015/08/11 职场文书
导游词幽默开场白
2019/06/26 职场文书
2019奶茶店创业计划书范本!
2019/07/15 职场文书
uniapp 微信小程序 自定义tabBar 导航
2022/04/22 Javascript