>백엔드 개발 >PHP 튜토리얼 >PHP의 이중 연결 목록에서 노드 삭제 및 삽입을 구현하는 방법

PHP의 이중 연결 목록에서 노드 삭제 및 삽입을 구현하는 방법

墨辰丷
墨辰丷원래의
2018-05-17 13:38:251547검색

본 글에서는 PHP에서 이중 연결 리스트의 노드를 삭제하고 삽입하는 방법을 주로 소개하고, PHP에서 이중 연결 리스트의 정의와 노드 연산과 관련된 구현 기술을 예시 형태로 분석하여 도움이 필요한 친구들이 참고할 수 있도록 하겠습니다.

자세한 내용은 다음과 같습니다.

개요:

이중 연결 목록이라고도 하는 이중 연결 목록은 연결 목록의 한 유형입니다. 각 데이터 노드에는 직접 후속 항목을 가리키는 두 개의 포인터가 있습니다. 그리고 각각 직속 전임자. 따라서 이중 연결 목록의 모든 노드에서 시작하면 이전 노드와 후속 노드에 쉽게 액세스할 수 있습니다. 일반적으로 우리는 양방향 순환 연결 목록을 구성합니다.

구현 코드:

<?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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.