扣丁学堂PHP培训简述如何实现找出链表中环的入口节点

2018-12-05 15:57:43 447浏览

本篇文章开头小编先抛出一个问题给大家,看看有多少的小伙伴知道答案,小编给出的问题是PHP如何实现找出链表中环的入口节点?关于这个问题请问对PHP开发感兴趣或者是参加PHP培训正在学习中的小伙伴们有多少知道的?好了,不卖关子了,咱们这篇文章就是要和读者们探讨一下PHP实现找出链表中环的入口节点问题,下面一下来看一下吧。



扣丁学堂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培训官网、微信等平台,扣丁学堂IT职业在线学习教育平台为您提供权威的PHP开发视频教程,除此之外扣丁学堂还有PHP从入门到精通的学习路线图供大家参考哦。扣丁学堂PHP技术交流群:374332265。




【关注微信公众号获取更多学习资料】

 

查看更多关于“php培训资讯”的相关文章>>


标签: PHP培训 PHP基础教程 PHP学习视频 PHP教学视频 PHP入门教程 PHP教程视频 PHP在线学习 PHP在线视频 PHP在线教程

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号