>백엔드 개발 >PHP 튜토리얼 >PHP에서 연결리스트를 역방향으로 바꾸는 방법(코드 예)

PHP에서 연결리스트를 역방향으로 바꾸는 방법(코드 예)

不言
不言원래의
2018-09-12 17:17:422928검색

이 글의 내용은 PHP에서 역방향 연결 리스트(코드 예제)를 구현하는 방법에 대한 내용입니다. 필요한 친구들이 참고할 수 있기를 바랍니다.

1. 일반적인 방법은 반복과 재귀로 구분됩니다. 반복은 처음부터 끝까지, 재귀는 끝에서 시작까지입니다.
2. 두 개의 포인터(old와 new)를 설정하고, 각 항목은 new 뒤에 추가됩니다. 새로운 연결 리스트는 new를 가리킨다. 연결 리스트 헤더
3. old->next는 new를 직접 가리킬 수 없지만 임시 포인터 tmp는 old->next가 가리키는 주소 공간을 가리키도록 설정해야 합니다. 원래 연결 목록 데이터, 그리고 old->next는 new를 가리킵니다. New는 old, new=old로 이동하고 마지막으로 old=tmp로 이동하여 데이터를 검색합니다

while(old!=null){
  tmp=old->next
  old->next=new
  new=old
  old=tmp
}
<?php
class Node{
        public $data;
        public $next;
}
//头插法创建一个链表
$linkList=new Node();
$linkList->next=null;//头结点
for($i=1;$i<=10;$i++){
        $node=new Node();
        $node->data="aaa{$i}";//创建新结点$node
        $node->next=$linkList->next;//$node->next指向头结点->next
        $linkList->next=$node;//头结点->next指向$node
}

var_dump($linkList);


function ReverseList($pHead){
        $old=$pHead->next;//跳过头结点
        $new=null;
        $tmp=null;
        //反转过程
        while($old!=null){
                $tmp=$old->next;
                $old->next=$new;
                $new=$old;
                $old=$tmp;
        }   
        //给新链表加个头结点
        $newHead=new Node();
        $newHead->next=$new;
        var_dump($newHead);
}
ReverseList($linkList);
object(Node)#1 (2) {
  ["data"]=>
  NULL
  ["next"]=>
  object(Node)#11 (2) {
    ["data"]=>
    string(5) "aaa10"
    ["next"]=>
    object(Node)#10 (2) {
      ["data"]=>
      string(4) "aaa9"
      ["next"]=>
      object(Node)#9 (2) {
        ["data"]=>
        string(4) "aaa8"
        ["next"]=>
        object(Node)#8 (2) {
          ["data"]=>
          string(4) "aaa7"
          ["next"]=>
          object(Node)#7 (2) {
            ["data"]=>
            string(4) "aaa6"
            ["next"]=>
            object(Node)#6 (2) {
              ["data"]=>
              string(4) "aaa5"
              ["next"]=>
              object(Node)#5 (2) {
                ["data"]=>
                string(4) "aaa4"
                ["next"]=>
                object(Node)#4 (2) {
                  ["data"]=>
                  string(4) "aaa3"
                  ["next"]=>
                  object(Node)#3 (2) {
                    ["data"]=>
                    string(4) "aaa2"
                    ["next"]=>
                    object(Node)#2 (2) {
                      ["data"]=>
                      string(4) "aaa1"
                      ["next"]=>
                      NULL
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
object(Node)#12 (2) {
  ["data"]=>
  NULL
  ["next"]=>
  object(Node)#2 (2) {
    ["data"]=>
    string(4) "aaa1"
    ["next"]=>
    object(Node)#3 (2) {
      ["data"]=>
      string(4) "aaa2"
      ["next"]=>
      object(Node)#4 (2) {
        ["data"]=>
        string(4) "aaa3"
        ["next"]=>
        object(Node)#5 (2) {
          ["data"]=>
          string(4) "aaa4"
          ["next"]=>
          object(Node)#6 (2) {
            ["data"]=>
            string(4) "aaa5"
            ["next"]=>
            object(Node)#7 (2) {
              ["data"]=>
              string(4) "aaa6"
              ["next"]=>
              object(Node)#8 (2) {
                ["data"]=>
                string(4) "aaa7"
                ["next"]=>
                object(Node)#9 (2) {
                  ["data"]=>
                  string(4) "aaa8"
                  ["next"]=>
                  object(Node)#10 (2) {
                    ["data"]=>
                    string(4) "aaa9"
                    ["next"]=>
                    object(Node)#11 (2) {
                      ["data"]=>
                      string(5) "aaa10"
                      ["next"]=>
                      NULL
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

관련 권장 사항:

PHP가 구현하는 방법에 대해 연결된 목록의 정의와 반전 기능

단일 연결 목록을 구현하는 PHP의 예 Code_PHP Tutorial

위 내용은 PHP에서 연결리스트를 역방향으로 바꾸는 방법(코드 예)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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