首頁 >後端開發 >php教程 >PHP實作找出鍊錶中環的入口節點實例詳解

PHP實作找出鍊錶中環的入口節點實例詳解

小云云
小云云原創
2018-01-16 13:58:451571瀏覽

本文主要介紹了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;
}

相關推薦:

jQuery遍歷節點方法小結

jQuery ajax動態新增節點無法觸發點擊事件如何解決

淺聊事件冒泡、事件委託、jQuery元素節點操作

#

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

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