首頁 >後端開發 >php教程 >PHP找出鍊錶中環入口節點步驟詳解

PHP找出鍊錶中環入口節點步驟詳解

php中世界最好的语言
php中世界最好的语言原創
2018-05-19 14:54:401498瀏覽

這次帶給大家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使用Z字形順序列印二元樹步驟詳解

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

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