Heim  >  Artikel  >  Backend-Entwicklung  >  Beispielerklärung für die PHP-Implementierung einer Single-Linked-List-Flip-Operation

Beispielerklärung für die PHP-Implementierung einer Single-Linked-List-Flip-Operation

jacklove
jackloveOriginal
2018-07-06 17:56:181792Durchsuche

Dieser Artikel stellt hauptsächlich die Implementierung der einfach verknüpften Listenoperation in PHP vor und analysiert die Definition, Durchquerung, Rekursion, das Umdrehen und andere verwandte Operationsfähigkeiten der einfach verknüpften PHP-Liste in Form von Beispielen, auf die sich Freunde in Not beziehen können

In diesem Artikel wird anhand eines Beispiels die Implementierung einer einfach verknüpften Listenumdrehungsoperation in PHP beschrieben. Geben Sie es als Referenz an alle weiter. Die Details lauten wie folgt:

Wenn eine Sequenz nur Links enthält, die auf ihre Nachfolgeknoten verweisen, wird die verknüpfte Liste als einfach verknüpfte Liste bezeichnet.

Hier ist die Definition einer einfach verknüpften Liste und der Flip-Operationsmethode:

<?php
/**
 * @file reverseLink.php
 * @author showersun
 * @date 2016/03/01 10:33:25
 **/
class Node{
  private $value;
  private $next;
  public function __construct($value=null){
    $this->value = $value;
  }
  public function getValue(){
    return $this->value;
  }
  public function setValue($value){
    $this->value = $value;
  }
  public function getNext(){
    return $this->next;
  }
  public function setNext($next){
    $this->next = $next;
  }
}
//遍历,将当前节点的下一个节点缓存后更改当前节点指针 
function reverse($head){
  if($head == null){
    return $head;
  }
  $pre = $head;//注意:对象的赋值
  $cur = $head->getNext();
  $next = null;
  while($cur != null){
    $next = $cur->getNext();
    $cur->setNext($pre);
    $pre = $cur;
    $cur = $next;
  }
  //将原链表的头节点的下一个节点置为null,再将反转后的头节点赋给head 
  $head->setNext(null);
  $head = $pre;
  return $head;
}
//递归,在反转当前节点之前先反转后续节点 
function reverse2($head){
  if (null == $head || null == $head->getNext()) {
    return $head;
  }
  $reversedHead = reverse2($head->getNext());
  $head->getNext()->setNext($head);
  $head->setNext(null);
  return $reversedHead;
}
function test(){
  $head = new Node(0);
  $tmp = null;
  $cur = null;
  // 构造一个长度为10的链表,保存头节点对象head  
  for($i=1;$i<10;$i++){
    $tmp = new Node($i);
    if($i == 1){
      $head->setNext($tmp);
    }else{
      $cur->setNext($tmp);
    }
    $cur = $tmp;
  }
  //print_r($head);exit;
  $tmpHead = $head;
  while($tmpHead != null){
    echo $tmpHead->getValue().&#39; &#39;;
    $tmpHead = $tmpHead->getNext();
  }
  echo "\n";
  //$head = reverse($head);
  $head = reverse2($head);
  while($head != null){
    echo $head->getValue().&#39; &#39;;
    $head = $head->getNext();
  }
}
test();
?>

Laufende Ergebnisse:

0 1 2 3 4 5 6 7 8 9 9 8 7 6 5 4 3 2 1 0

Artikel, die Sie interessieren könnten:

Erklärung, wie man zwei geordnete Arrays in PHP zusammenführt

Detaillierte Erläuterung der Methode zur Implementierung des Joseph-Ring-Problems in PHP

Erklärung der Methode zur Verwendung von Passport zur Implementierung der Auth-Authentifizierung in Laravel5 .5

Das obige ist der detaillierte Inhalt vonBeispielerklärung für die PHP-Implementierung einer Single-Linked-List-Flip-Operation. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn