ホームページ  >  記事  >  バックエンド開発  >  PHPで二重リンクリストのノードの削除と挿入を実装する方法

PHPで二重リンクリストのノードの削除と挿入を実装する方法

墨辰丷
墨辰丷オリジナル
2018-05-17 13:38:251498ブラウズ

この記事では、主に PHP で二重リンク リストのノードを削除および挿入する方法を紹介し、PHP での二重リンク リストの定義とノード操作に関連する実装テクニックを例の形式で分析します。

詳細は次のとおりです:

概要:

二重リンク リスト (二重リンク リストとも呼ばれる) は、リンク リストの一種であり、各データ ノードには、直接の後続ノードを指す 2 つのポインターがあります。と直接の前任者。したがって、二重リンク リスト内の任意のノードから開始して、その先行ノードおよび後続ノードに簡単にアクセスできます。一般に、双方向循環リンクリストを構築します。

実装コード:

<?php 
class node{
  public $prev;
  public $next;
  public $data;
  public function __construct($data,$prev=null,$next=null){
    $this->data=$data;
    $this->prev=$prev;
    $this->next=$next;
  }
}
class doubleLinkList{
  private $head;
  public function __construct()
  {
    $this->head=new node("head",null,null);
  }
  //插入节点
  public function insertLink($data){
    $p=new node($data,null,null);
    $q=$this->head->next;
    $r=$this->head;
    while($q){
      if($q->data>$data){
        $q->prev->next=$p;
        $p->prev=$q->prev;
        $p->next=$q;
        $q->prev=$p;
      }else{
      $r=$q;$q=$q->next;
      }
    }
    if($q==null){
      $r->next=$p;
      $p->prev=$r;
    }
  }
  //从头输出节点
  public function printFromFront(){
    $p=$this->head->next;
    $string="";
    while($p){
    $string.=$string?",":"";
    $string.=$p->data;
    $p=$p->next;
    }
    echo $string."<br>";
  }
  //从尾输出节点
  public function printFromEnd(){
    $p=$this->head->next;
    $r=$this->head;
    while($p){
    $r=$p;$p=$p->next;
    }
    $string="";
    while($r){
      $string.=$string?",":"";
      $string.=$r->data;
      $r=$r->prev;
    }
    echo $string."<br>";
  }
  public function delLink($data){
    $p=$this->head->next;
    if(!$p)
    return;
    while($p){
      if($p->data==$data)
      {
        $p->next->prev=$p->prev;
        $p->prev->next=$p->next;
        unset($p);
        return;
      }
      else{
        $p=$p->next;
      }
    }
    if($p==null)
    echo "没有值为{$data}的节点";
  }
}
$link=new doubleLinkList();
$link->insertLink(1);
$link->insertLink(2);
$link->insertLink(3);
$link->insertLink(4);
$link->insertLink(5);
$link->delLink(3);
$link->printFromFront();
$link->printFromEnd();
$link->delLink(6);

実行結果:

1,2,4,5
5,4,2,1,head
没有值为6的节点

関連推奨事項:

JSはDOMを操作してノードを挿入します

やり方JS DOMで実装 ノードの挿入

jQuery ノードの挿入 insertAfter とノードの移動 insertBefore 使用例

以上がPHPで二重リンクリストのノードの削除と挿入を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。