博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[PHP] 算法-复制复杂链表的PHP实现
阅读量:6348 次
发布时间:2019-06-22

本文共 2575 字,大约阅读时间需要 8 分钟。

复杂链表的复制:1.在旧链表中每个结点的后面复制出一个结点,隔代2.把旧链表的随机指向部分,复制到新添加的结点上3.把新结点从旧链表中拆分出来成新链表1.linklist=headwhile linklist!=null    node=new Node()    node->next=linklist->next    linklist->next=node    linklist=node->next2.linklist=headwhile listlink!=null    node=listlink->next    listlink->next->random=linklist->random!=null  ? listlink->random->next : null    listlink=node->next3.tmp=linklist->nextlinklist->next=tmp->nextlinklist=tmp

 

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.'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 } }}

 

转载于:https://www.cnblogs.com/taoshihan/p/9624073.html

你可能感兴趣的文章
关于Servlet一些东西
查看>>
注册验证的时候一直出现的报错问题,终于解决了
查看>>
在linux中编写脚本实现自启动tomcat服务
查看>>
关于JDK中的集合总结(二)
查看>>
修改数据库字段类型或名字
查看>>
[BZOJ3631]:[JLOI2014]松鼠的新家(LCA+树上差分)
查看>>
吐槽#001
查看>>
jQuery的介绍
查看>>
excel2007内容转成xml
查看>>
php 基础知识
查看>>
MySQL数据库引擎
查看>>
OneZero第四周第五次站立会议(2016.4.15)
查看>>
MYSQL的存储函数
查看>>
lnks
查看>>
Problem J
查看>>
Ellipse
查看>>
ViewPager与PagerAdapter
查看>>
【CSS系列】对表单和数据表格应用样式
查看>>
如何成为Java架构师
查看>>
19.04.18--推箱子(graphics图形库)(内置可视化地图编辑器//还未加入读取写入文件)...
查看>>