设为首页 | 加入收藏
首页 bet36最新备用体育
程序人生互联网新闻黑客新闻网络创业
WEB开发
PHPJSPASP.NETJavascriptAJAXjQueryNode.js
编程语言
JavaGolangPythonC++C语言VC++C#
站长之家
建站技巧网络赚钱网站安全
数据库
MySQLMSSQLSQLiteMongoDBRedisAccess存储技术
网页设计
HTML+DIV+CSSFlash网页制作技巧
网络技术
网络综合网络管理无线技术云计算云技术攻防知识安全防护
学电脑
电脑常识WindowsLinuxCPU内存显卡硬盘主板
学开发
开发总结365bet行政收费_365bet提款维护_365bet足球开户盘口开发工具开发手册面试题
w3school
WEB开发 > PHP >

PHP实现找出链表中环的入口节点

发布时间:2019-09-28 | 阅读次数:704

本文实例讲述了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指向环的入口。(还没怎么懂)

实现代码

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;
}