首頁 >後端開發 >php教程 >PHP實作找出鍊錶中環的入口節點的相關知識講解

PHP實作找出鍊錶中環的入口節點的相關知識講解

jacklove
jacklove原創
2018-06-30 17:52:262394瀏覽

這篇文章主要介紹了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技巧

PHP實作依之字形順序印出二元樹的方法講解

PHP取得二元樹鏡像的方法講解

##

以上是PHP實作找出鍊錶中環的入口節點的相關知識講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn