使用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)
总是评价为真。这可能是相关的吗?
答案 0 :(得分:1)
插入单一链接列表的头部: 我们可以轻松地将元素插入列表的头部。那我们怎么做呢?创建一个新节点,将新节点的下一个点设置为当前头节点,并将head变量(在类中)指向新节点。即使链接列表为空,此方法也有效。请注意,在我们发送head变量指向新节点之前,我们将新节点的下一个点设置为head节点。
插入单一链接列表的尾部: 我们还可以轻松地在链接列表的尾部插入元素,前提是我们保留链接列表的尾节点的引用。创建一个新节点,将新节点的下一个节点设置为null,将尾节点的下一个节点指向新节点,将tail变量设置为指向新元素。注意我们在将tail变量更改为指向新节点之前设置了前一个尾节点的下一个节点。
在所有其他时间,将新节点添加到头部或尾部。
// All other times if head
else{
$temp = $head;
$head = $node;
$node->nextPtr = $temp;
count ++;
}