Cet article présente principalement la fonction de définition et d'inversion de l'implémentation PHP des listes chaînées. Il analyse la définition de base, l'ajout, la suppression, le parcours et deux opérations d'inversion des listes chaînées PHP sous forme d'exemples. référence,
L'exemple de cet article décrit la définition et la fonction d'inversion de liste chaînée en PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :
Définition PHP de la liste chaînée et des opérations telles que l'ajout, la suppression, le parcours, etc. :
<?php class Node { private $Data;//节点数据 private $Next;//下一节点 public function setData($value){ $this->Data=$value; } public function setNext($value){ $this->Next=$value; } public function getData(){ return $this->Data; } public function getNext(){ return $this->Next; } public function __construct($data,$next){ $this->setData($data); $this->setNext($next); } } class LinkList { private $header;//头节点 private $size;//长度 public function getSize() { $i=0; $node=$this->header; while($node->getNext()!=null) { $i++; $node=$node->getNext(); } return $i; } public function setHeader($value){ $this->header=$value; } public function getHeader(){ return $this->header; } public function __construct(){ header("content-type:text/html; charset=utf-8"); $this->setHeader(new Node(null,null)); } /** *@author MzXy *@param $data--要添加节点的数据 * */ public function add($data) { $node=$this->header; while($node->getNext()!=null) { $node=$node->getNext(); } $node->setNext(new Node($data,null)); } /** *@author MzXy *@param $data--要移除节点的数据 * */ public function removeAt($data) { $node=$this->header; while($node->getData()!=$data) { $node=$node->getNext(); } $node->setNext($node->getNext()); $node->setData($node->getNext()->getData()); } /** *@author MzXy *@param 遍历 * */ public function get() { $node=$this->header; if($node->getNext()==null){ print("数据集为空!"); return; } while($node->getNext()!=null) { print('['.$node->getNext()->getData().'] -> '); if($node->getNext()->getNext()==null){break;} $node=$node->getNext(); } } /** *@author MzXy *@param $data--要访问的节点的数据 * @param 此方法只是演示不具有实际意义 * */ public function getAt($data) { $node=$this->header->getNext(); if($node->getNext()==null){ print("数据集为空!"); return; } while($node->getData()!=$data) { if($node->getNext()==null){break;} $node=$node->getNext(); } return $node->getData(); } /** *@author MzXy *@param $value--需要更新的节点的原数据 --$initial---更新后的数据 * */ public function update($initial,$value) { $node=$this->header->getNext(); if($node->getNext()==null){ print("数据集为空!"); return; } while($node->getData()!=$data) { if($node->getNext()==null){break;} $node=$node->getNext(); } $node->setData($initial); } } $lists = new LinkList(); $lists -> add(1); $lists -> add(2); $lists -> get(); echo '<pre class="brush:php;toolbar:false">'; print_r($lists); echo ''; ?>
Opération de liste chaînée inversée :
1. Méthodes couramment utilisées : alterner gauche et droite, enregistrer le nœud suivant et remplacer le nœud précédent par le nœud suivant. Mettre en œuvre le remplacement.
Code :
function ReverseList($pHead) { // write code here if($pHead == null || $pHead->next == null){ return $pHead; } $p = $pHead; $q = $pHead->next; $pHead->next = null;//$pHead 变为尾指针 while($q){ $r = $q->next; $q->next = $p; $p = $q; $q = $r; } return $p; }
2. Utilisez la méthode récursive. Trois nœuds, le nœud principal, le premier nœud et le deuxième nœud. Traitez tous les nœuds après le premier nœud comme le deuxième nœud et effectuez une boucle en séquence. Puisque $pHead != null || $pHead->next != null
doit être satisfait ; il n'y aura donc pas de parcours sans fin
function ReverseList($pHead) { // write code here if($pHead == null || $pHead->next == null){ return $pHead; } $res = ReverseList($pHead->next); $pHead->next->next = $pHead; $pHead->next = null; return $res;
Ce qui précède est tout le contenu de cet article. , j'espère que cela sera utile à l'apprentissage de tout le monde. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois !
Recommandations associées :
À propos des opérations de liste chaînée en PHP
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!