0

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

调用该add函数后,该对象似乎从未保留任何信息。var_dump($playerList)为我的头指针和尾指针返回 NULL。或者,如果我将其替换为,则无论我将count 语句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)在链表类中放置和回显语句并观察它PlayerNode是否正常工作。

但是,另一个奇怪的观察......if($head==null)总是评估为真。这可能有关系吗?

4

1 回答 1

1

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

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

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

              // All other times if head
                else{
                        $temp = $head;
                        $head = $node;
                        $node->nextPtr = $temp;
                        count ++; 
                    }
于 2013-01-05T22:01:59.333 回答