链表不保存数据成员



使用PHP 5.3.10,我创建了一个链接列表类,并试图保存一个足球运动员列表。

调用add函数后,对象似乎从未保留任何信息。var_dump($playerList)对我的头和尾指针都返回NULL。或者,如果我将其替换为var_dump($playerList->count),无论我将var_dump计数语句放在哪里,它都不会打印任何内容。

我已经看了手册,但没有找到语法错误。我的直觉告诉我mysql_fetch_array正在做一些奇怪的事情。如下所述,我的测试表明,当我调用playerList->add()时,值实际上正在传递。总之,下面是我的简单代码:

/* Populates lists with available players. */
function populateList($sql)
{
    $playerList = new PlayerList();
    while ($row = mysql_fetch_array($sql, MYSQL_NUM)) 
    {
        $playerList->add(new Player($row[0], $row[1], $row[2], $row[3], $row[4]));
    }
    var_dump($playerList);
}

和我的链表类:

include 'PlayerNode.php';
class PlayerList
{
    public $head;
    public $tail;
    public $count;
    function PlayerList()
    {
        $head = null;
        $tail = null;
        $count = 0;
    }
    function add($player)
    {
        $count ++;            
        $node = new PlayerNode($player);
        //First time in
        if ($head == null)
        {
            $head = $node;
            $tail = $node;
            $head->nextPtr = null;
        }
        // All other times
        else
        {
            $tail->nextPtr = $node;
            $tail = $node;
            $node->nextPtr = null;
        }
        $count++;
    }               
}

我可以将var_dump($node)和echo语句放在链表类中,并观察到PlayerNode工作正常。

但是,另一个奇怪的观察…if($head==null) ALWAYS的计算结果也为true。这两者有关联吗?

单链表首插入:我们可以很容易地将元素插入到列表的头部。那么我们该怎么做呢?创建一个新节点,将新节点的下一个点设置为当前头节点,并将头变量(在类中)设置为新节点。即使链表为空,此方法也有效。注意,在发送head变量指向新节点之前,我们将next的新节点点设置为head节点。

单链表尾部插入:我们也可以很容易地在链表的尾部插入元素,只要我们为链表的尾部节点保留一个引用。创建一个新节点,将新节点的next设置为null,将尾节点的next设置为指向新节点,将尾变量设置为指向新元素。注意,在将tail变量更改为指向新节点之前,我们设置了前一个尾部节点的next。

在所有其他时间将新节点添加到头部或尾部。

              // All other times if head
                else{
                        $temp = $head;
                        $head = $node;
                        $node->nextPtr = $temp;
                        count ++; 
                    }

相关内容

  • 没有找到相关文章

最新更新