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)ALWAYS も true と評価されます。これは関連している可能性がありますか?

4

1 に答える 1

1

単方向リストの先頭への挿入: リスト の先頭に要素を簡単に挿入できます。では、どうやってそれを行うのですか?新しいノードを作成し、新しいノード ポイントの次のポイントを現在のヘッド ノードに設定し、(クラス内の) ヘッド変数ポイントを新しいノードに設定します。このメソッドは、リンク リストが空の場合でも機能します。新しいノードを指すように head 変数を送信する前に、次の新しいノード ポイントを head ノードに設定することに注意してください。

単独リンク リストの末尾への挿入: リンク リスト の末尾ノードへの参照を保持していれば、リンク リストの末尾に要素を簡単に挿入することもできます。新しいノードを作成し、新しいノードの次を null に設定し、テール ノード ポイントの次を新しいノードに設定し、テール変数を新しい要素を指すように設定します。テール変数を新しいノードを指すように変更する前に、前のテール ノードの次のノードを設定することに注意してください。

それ以外の場合は、新しいノードを頭または尾に追加します。

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