输入一个链表的头节点,从尾到头打印每个节点的值,利用PHP如何实现?

发布于 2022-09-05 06:01:05 字数 2678 浏览 37 评论 0

以下是我的实现代码(我只是打印出了每个节点):

<?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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

浅听莫相离 2022-09-12 06:01:05

用对象实现
PHP实现链表是有意义的,因为对象是值引用而不是值传递

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文