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发电子邮件
Oct 09 PHP
以文本方式上传二进制文件的PHP程序
Oct 09 PHP
php 不同编码下的字符串长度区分
Sep 26 PHP
php面向对象全攻略 (三)特殊的引用“$this”的使用
Sep 30 PHP
php生成静态文件的多种方法分享
Jul 17 PHP
php输出echo、print、print_r、printf、sprintf、var_dump的区别比较
Jun 21 PHP
php中error与exception的区别及应用
Jul 28 PHP
php实现基于微信公众平台开发SDK(demo)扩展的方法
Dec 22 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
Jul 28 PHP
PHP的消息通信机制测试实例
Nov 10 PHP
Laravel框架定时任务2种实现方式示例
Dec 08 PHP
PHP用swoole+websocket和redis实现web一对一聊天
Nov 05 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中数据的批量导入(csv文件)
2006/10/09 PHP
PHP求小于1000的所有水仙花数的代码
2012/01/10 PHP
PHP实现获取图片颜色值的方法
2014/07/11 PHP
悄悄用脚本检查你访问过哪些网站的代码
2010/12/04 Javascript
JQuery实现table行折叠效果以JSON做数据源
2014/05/26 Javascript
javascript使用window.open提示“已经计划系统关机”的原因
2014/08/15 Javascript
Javascript中的关键字和保留字整理
2014/10/16 Javascript
AngularJS实现Model缓存的方式
2016/02/03 Javascript
JS实现随页面滚动显示/隐藏窗口固定位置元素
2016/02/26 Javascript
解析javascript瀑布流原理实现图片滚动加载
2016/03/10 Javascript
JS留言功能的简单实现案例(推荐)
2016/06/23 Javascript
JS对象是否拥有某属性如何判断
2017/02/03 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
JS中的算法与数据结构之列表(List)实例详解
2019/08/16 Javascript
jQuery 筛选器简单操作示例
2019/10/02 jQuery
浅谈vue 锚点指令v-anchor的使用
2019/11/13 Javascript
Vue 使用Props属性实现父子组件的动态传值详解
2019/11/13 Javascript
精读《Vue3.0 Function API》
2020/05/20 Javascript
vue-amap根据地址回显地图并mark的操作
2020/11/03 Javascript
[02:47]DOTA2亚洲邀请赛 HR战队出场宣传片
2015/02/07 DOTA
在Mac OS系统上安装Python的Pillow库的教程
2015/11/20 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
python 制作简单的音乐播放器
2020/11/25 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
html5画布旋转效果示例
2014/01/27 HTML / CSS
加拿大花店:1800Flowers.ca
2016/11/16 全球购物
外语专业毕业生个人的自荐信
2013/11/19 职场文书
新闻发布会主持词
2014/03/28 职场文书
讲文明树新风演讲稿
2014/05/12 职场文书
优秀大专毕业生求职信
2014/08/04 职场文书
高一学年自我鉴定范文(3篇)
2014/09/26 职场文书
三潭印月的导游词
2015/02/12 职场文书
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript
Go归并排序算法的实现方法
2022/04/06 Golang
MySQL详解进行JDBC编程与增删改查方法
2022/06/16 MySQL