資料結構 PHP 鍊錶的翻轉 判斷鍊錶是否有環

2021-10-11 19:12:26 字數 2307 閱讀 4886

2.判斷鍊錶是否有環

這篇檔案主要通過學習鍊錶的翻轉判斷鍊錶是否有環這兩個簡單的例子加深對鍊錶這種資料結構的理解。

1.1 鍊錶翻轉原理圖

1.2 鍊錶翻轉**

<?php 

require 'linkedlist.php';

$linkedlist = new linkedlist();

for ($i = 1;$i <= 20;$i++)

echo $linkedlist->tostring();

/** * 20->19->18->17->16->15->14->13->12->11->10->9->8->7->6->5->4->3->2->1->null

*/echo "\n";

function reverse($head)

$head->next = null;

return $pre;

}$linkedlist->sethead(reverse($linkedlist->gethead()));

echo $linkedlist->tostring();

/** * 1->2->3->4->5->6->7->8->9->10->11->12->13->14->15->16->17->18->19->20->null

*/echo "\n";

演示輸出如下圖:

[外鏈轉存失敗,源站可能有防盜煉機制,建議將儲存下來直接上傳(img-xnmwarlg-1607591730558)(/uploads/sjjghsf/images/m_aaa1fe689fa688efe41cba4d2d3a6cea_r.png)]

2.1 鍊錶環示意圖

2.2 問題分析

在遍歷鍊錶的時候可以維護兩個指標賦值,可以將這兩個快慢插設為1,當遍歷到環上面的時候,由於維護的兩個指標的快慢相差1,最後肯定會有相遇的時候,若出現相遇的情況則表示有環,若快指標最後指向null表示沒有環。

2.3 原理圖

2.4 示例**

<?php 

class node

}function isloop($head)

$fast = $fast->next->next ?? null; //每次跳兩步

$slow = $slow->next ?? null; //每次跳一步

if($i)

$i++;

}return false;

}$node1 = new node(1);

$node2 = new node(2);

$node3 = new node(3);

$node4 = new node(4);

$node5 = new node(5);

$node6 = new node(6);

$node7 = new node(7);

$node8 = new node(8);

$node9 = new node(9);

$node1->next = $node2;

$node2->next = $node3;

$node3->next = $node4;

$node4->next = $node5;

$node5->next = $node6;

$node6->next = $node7;

$node7->next = $node8;

$node8->next = $node9;

$node9->next = $node5;

var_dump(isloop($node1));

演示輸出如下圖:

**倉庫 :

掃碼關注愛因詩賢

資料結構69 鍊錶逆置,鍊錶反轉,鍊錶翻轉

鍊錶翻轉,簡單地理解,就是將鍊錶的頭部結點變為鍊錶的尾部結點,與此同時將原鍊錶的尾部結點變成頭部結點。如下圖所示 圖 1 鍊錶翻轉示意圖 將鍊錶進行翻轉的方法有多種,本節給大家介紹兩種實現方法。實現鍊錶翻轉最直接的方法就是 從鍊錶的頭部開始遍歷每個結點,改變每個結點的指向,即將原本指向下乙個結點的指...

Python資料結構之翻轉鍊錶

翻轉乙個鍊錶 樣例 給出乙個鍊錶1 2 3 null,這個翻轉後的鍊錶為3 2 1 null 一種比較簡單的方法是用 摘除法 就是先新建乙個空節點,然後遍歷整個鍊錶,依次令遍歷到的節點指向新建鍊錶的頭節點。那樣例來說,步驟是這樣的 1.新建空節點 none 2.1 none 3.2zmaqmauon...

PHP資料結構之 鍊錶

鍊錶是一種在邏輯上連續 有序的資料儲存結構 在物理儲存單元上非連續非有序 在我大學的時候,學習c 的資料結構課程時,最先接觸的就是鍊錶 大學是學渣別噴.那麼鍊錶是怎樣的一種結構呢?用 形象的 文本來描述就是 node 1 node 2 node 3 node 4 node n 每乙個node包含一些...