复杂链表的复制:
1.在旧链表中每个结点的后面复制出一个结点,隔代
2.把旧链表的随机指向部分,复制到新添加的结点上
3.把新结点从旧链表中拆分出来成新链表
linklist=headwhile linklist!=null node=new Node() node- next=linklist- next linklist- next=node linklist=node- nextlinklist=headwhile listlink!=null node=listlink- next listlink- next- random=linklist- random!=null ? listlink- random- next : null listlink=node- nexttmp=linklist- nextlinklist- next=tmp- nextlinklist=tmp
?phphtml' target='_blank'>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;
$node=new Node($temp- data. clone $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}
相关推荐:
Java实现复杂链表的复制代码分享
php实现单链表的实例代码
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。
新闻热点
疑难解答