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 实用代码收集
Jan 22 PHP
php is_file 判断给定文件名是否为一个正常的文件
May 10 PHP
php 数组动态添加实现代码(最土团购系统的价格排序)
Dec 30 PHP
php导入csv文件碰到乱码问题的解决方法
Feb 10 PHP
php解决约瑟夫环示例
Apr 09 PHP
Mac系统下使用brew搭建PHP(LNMP/LAMP)开发环境
Mar 03 PHP
mod_php、FastCGI、PHP-FPM等PHP运行方式对比
Jul 02 PHP
PHP数组实例详解
Jun 26 PHP
php版微信自动获取收货地址api用法示例
Sep 22 PHP
详解PHP安装mysql.so扩展的方法
Dec 31 PHP
PHP在弹框中获取foreach中遍历的id值并传递给地址栏
Jun 13 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
Sep 04 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
JS实多级联动下拉菜单类,简单实现省市区联动菜单!
2007/05/03 Javascript
JavaScript去除空格的三种方法(正则/传参函数/trim)
2013/02/06 Javascript
JS 实现Json查询的方法实例
2013/04/12 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
Javascript中的回调函数和匿名函数的回调示例介绍
2014/05/12 Javascript
javascript设计简单的秒表计时器
2020/09/05 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
第一次接触神奇的Bootstrap基础排版
2016/07/26 Javascript
jQuery实现带遮罩层效果的blockUI弹出层示例【附demo源码下载】
2016/09/14 Javascript
详解基于javascript实现的苹果系统底部菜单
2016/12/02 Javascript
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
微信小程序表单验证form提交错误提示效果
2020/06/19 Javascript
对类Vue的MVVM前端库的实现代码
2018/09/07 Javascript
Koa 使用小技巧(小结)
2018/10/22 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
2020/02/28 Javascript
[02:43]中国五虎出征TI3视频
2013/08/02 DOTA
[05:17]DOTA2睡衣妹卖萌求签名 CJ第二天全明星影像
2013/07/28 DOTA
[15:57]教你分分钟做大人:斧王
2014/10/30 DOTA
[01:00:30]完美世界DOTA2联赛循环赛 Inki vs Matador BO2第二场 10.31
2020/11/02 DOTA
python 回调函数和回调方法的实现分析
2016/03/23 Python
Python实现的堆排序算法原理与用法实例分析
2017/11/22 Python
python re模块匹配贪婪和非贪婪模式详解
2020/02/11 Python
python实现录音功能(可随时停止录音)
2020/10/26 Python
css3的@media属性实现页面响应式布局示例代码
2014/02/10 HTML / CSS
非洲NO.1网上商店:Jumia肯尼亚
2016/08/18 全球购物
华润集团网上药店:健一网
2016/09/19 全球购物
预订奥兰多和佛罗里达州公园门票:FloridaTix
2018/01/03 全球购物
保护动物倡议书
2014/04/15 职场文书
Python数据分析之绘图和可视化详解
2021/06/02 Python
Python实现DBSCAN聚类算法并样例测试
2021/06/22 Python
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL
SQL Server表分区降低运维和维护成本
2022/04/08 SQL Server
vue route新窗口跳转页面并且携带与接收参数
2022/04/10 Vue.js
css3手动实现pc端横向滚动
2022/06/21 HTML / CSS