第八章:第5节 PHP数据结构与算法——单链表强化学习二(删除、修改功能)

更新于:2017-06-22 21:20:40

继续上节的内容:


我们现在再加入删除功能:


1.png


分析图


1355372439_5252.jpg


现在有3个人物节点,要把3号人物节点删除。


(1)首先有一个变量cur指向了head节点,即$cur=$head;$cur->next!=null成立,进入while循环,进行if判断,$cur->next->no为1,则和$herono为3不相等,cur向下走一步。


(2)此时cur指向了1号人物节点,$cur->next!=null成立,进入while循环,进行if判断,
$cur->next->no为3,则和$herono为3相等,找到位置了就break跳出了while循环。就要把这个3号人物节点拿掉,应该怎么拿呢?假设3号人物节点地址为0x123,7号人物节点地址为0x456,现在就是要把1号人物节点的next值改为0x456,这样3号人物节点就不在此单链表中了。


有人会有疑惑:3号人物节点不是也有next值,指向0x456吗即指向7号人物节点的,不用担心,此时3号人物节点已经是垃圾对象了,因为在php、java和c#中都有规定,如果一个对象没有任何一个引用指向它,它就是垃圾了,这一点一定要清楚,垃圾回收机制就会把3号人物节点回收了,这就是拿掉3号人物节点的思路


删除代码:
$cur->next=$cur->next->next;


注意:当你刚好删除的末尾会不会有问题呢?


删除最后一个节点,即要删除7号人物,那么cur就定位到了3号人物节点,此时$cur->next->next就是 7号人物节点的next属性值,7号人物节点是最后一个节点,它的next属性值为null,那么$cur->next=$cur->next->next;就是把3号人物节点的next属性值置为null,那么此时3号人物节点就是最后一个节点了就是末尾了。


看效果:

1.png


1.png


继续添加修改功能:


1.png


很好理解


1.png


1.png


韩顺平的单链表笔记——增删查改功能都一一介绍完了。朋友们您可以用楠神提供的代码做改进,试着结合HTML表单,超全局变量$_POST等,把单链表的增删查改功能通过表单提交实现了,而不是直接在源代码里操作数据。


下节我们开始了解单链表的升级版——环形链表(循环链表),听名字再结合单链表我们大概也能猜到环形链表是什么样子的吧。


1.png


尾节点的next不指向null了,指向前面的节点(大多是指向第一个数据节点)。


本节学习代码》》》