Heim >Backend-Entwicklung >PHP-Tutorial >PHP implementiert Code zum Kopieren komplexer verknüpfter Listen

PHP implementiert Code zum Kopieren komplexer verknüpfter Listen

不言
不言Original
2018-09-12 16:36:521779Durchsuche

Der Inhalt dieses Artikels befasst sich mit dem Code zum Kopieren komplexer verknüpfter Listen in PHP. Er hat einen gewissen Referenzwert. Ich hoffe, er wird für Sie hilfreich sein.

Kopieren einer komplexen verknüpften Liste:
1. Kopieren Sie einen Knoten hinter jedem Knoten in der alten verknüpften Liste, überspringen Sie Generationen.
2. Auf den neu hinzugefügten Knoten kopieren
3. Den neuen Knoten aus der alten verknüpften Liste in eine neue verknüpfte Liste aufteilen

1.
linklist=head
while linklist!=null
    node=new Node()
    node->next=linklist->next
    linklist->next=node
    linklist=node->next
2.
linklist=head
while listlink!=null
    node=listlink->next
    listlink->next->random=linklist->random!=null  ? listlink->random->next : null
    listlink=node->next
3.
tmp=linklist->next
linklist->next=tmp->next
linklist=tmp
<?php
class Node{
        public $data;
        public $random;
        public $next;
        public function __construct($data=""){
                $this->data=$data;
        }   
}
//构造一个复杂链表
$linkList=new Node();
$linkList->next=null;
$temp=$linkList;

$node1=new Node("111");
$temp->next=$node1;
$temp=$node1;

$node2=new Node("222");
$temp->next=$node2;
$temp=$node2;

$node3=new Node("333");
$node3->random=$node2; //node3又指向了node2
$temp->next=$node3;
$temp=$node3;


var_dump($linkList);
$cloneList=MyClone($linkList);
var_dump($cloneList);

//复制复杂链表
function MyClone($linkList){
        $linkList=$linkList->next;
        //第一步
        $temp=$linkList;
        while($temp!=null){
                $node=new Node($temp->data.&#39;clone&#39;);
                $node->next=$temp->next;//新结点的next指向当前结点的next
                $temp->next=$node;//当前结点的next指向新结点
                $temp=$node->next;//跳两级 跳过新复制的这个结点
        }    
        //第二步
        $temp=$linkList;
        while($temp!=null){
                $node=$temp->next;
                //当前结点的下一级random指向 当前结点random的下一级
                $temp->next->random=$temp->random!=null ? $temp->random->next : null;
                $temp=$node->next;
        }   
        //第三步
        $newList=$linkList->next;//从第二个结点开始要
        $temp=$newList;
        while($temp->next!=null){
                $node=$temp->next;//获取当前结点的next
                $temp->next=$node->next;//当前结点的next指向 下一级的next , 这样就消掉了下一个
                $temp=$node;//当前结点后移
        }
        return $newList;
}
object(Node)#1 (3) {
  ["data"]=>  string(0) ""
  ["random"]=>  NULL
  ["next"]=>  object(Node)#2 (3) {
    ["data"]=>    string(3) "111"
    ["random"]=>    NULL
    ["next"]=>    object(Node)#3 (3) {
      ["data"]=>      string(3) "222"
      ["random"]=>      NULL
      ["next"]=>      object(Node)#4 (3) {
        ["data"]=>        string(3) "333"
        ["random"]=>
        *RECURSION*
        ["next"]=>        NULL
      }
    }
  }
}object(Node)#5 (3) {
  ["data"]=>  string(8) "111clone"
  ["random"]=>  NULL
  ["next"]=>  object(Node)#6 (3) {
    ["data"]=>    string(8) "222clone"
    ["random"]=>    NULL
    ["next"]=>    object(Node)#7 (3) {
      ["data"]=>      string(8) "333clone"
      ["random"]=>
      *RECURSION*
      ["next"]=>      NULL
    }
  }
}

Verwandte Empfehlungen:

Java-Code kopieren Teilen zur Implementierung einer komplexen verknüpften Liste

PHP-Beispielcode zur Implementierung einer einfach verknüpften Liste

Das obige ist der detaillierte Inhalt vonPHP implementiert Code zum Kopieren komplexer verknüpfter Listen. 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