输入一个链表的头节点,从尾到头打印每个节点的值,利用PHP如何实现?
以下是我的实现代码(我只是打印出了每个节点):
<?php
/**
* Question:输入一个链表的头节点,反向打印链表节点
* Author:entner
* time: 2017-7-21
* version:1.0
*/
/**
*Thinking:
* 遍历链表节点,将访问到的节点压入栈中,然后输出栈元素
*Ready:
* (节点类 链表游标 随机数)-> 创建一个链表
*
*/
/**
*TODO:创建节点类
*@param $nodeName string 节点名称
*@param $next object 下一节点
*/
Class Node{
public $nodeName;
public $next;
public function __construct($nodename = null,$next = null){
$this->nodeName = $nodename;
$this->next = $next;
}
}
Class SingeLinkList{
public $header;
public $stack = [];
public $top = -1;
public $newNode;
function createNode($n){
/* 声明一个头节点 */
$this->header = new Node(null,null);
$head = $this->header;
for($i=0;$i<$n;$i++){
/* 创建新的节点 */
$this->newNode = new Node(rand(0,100),null);
$current = $this->newNode;
/* 将新节点压入栈中 */
$this->top++;
$this->stack[$this->top] = $current; //这里没有做栈的限制
/* 节点名称赋值 */
$head->nodeName = $current->nodeName;
/* 当前节点为新节点 */
$head->next = $current;
/* 将当前节点设置为新的尾节点 */
$head = $current;
}
$head->next = null;
if($head->next == null){
while($this->top != -1){
print_r($this->stack[$this->top]);
$this->top--;
}
}
}
}
echo "<pre>";
(new SingeLinkList)->createNode(4);
打印结果如下:
Node Object
(
[nodeName] => 15
[next] =>
)
Node Object
(
[nodeName] => 15
[next] => Node Object
(
[nodeName] => 15
[next] =>
)
)
Node Object
(
[nodeName] => 10
[next] => Node Object
(
[nodeName] => 15
[next] => Node Object
(
[nodeName] => 15
[next] =>
)
)
)
Node Object
(
[nodeName] => 93
[next] => Node Object
(
[nodeName] => 10
[next] => Node Object
(
[nodeName] => 15
[next] => Node Object
(
[nodeName] => 15
[next] =>
)
)
)
)
应该说,我只需要第四个结果就够了,为什么会出现递归的现象,我没有利用递归,而且我也不知道这样是不是对的,求指点。
P.S 这个题目和反转链表有什么区别?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
用对象实现
PHP实现链表是有意义的,因为对象是值引用而不是值传递