Los errores, en general, tienen que ver con las referencias.
El más crítico es no haber referenciado un par de métodos en ListNode
Código PHP:
function setPrevious($node){
$this->previousNode = &$node;
}
Debería ser así
Código PHP:
function setPrevious(&$node){// Aquí está la diferencia.
$this->previousNode = &$node;
}
Del mismo modo con setPrevious().
También en la clase LinkedList se referencias objetos que no lo necesitan. No debes referenciar objetos al pasarlos como parámetros en funciones o métodos.
Por ejemplo:
Código PHP:
$newNode = $this->getNewNode($object);
//...
$this->head->setNext(&$newNode);
Provocará un Warning relacionado con "Call-time pass-by-reference".
La manera de hacer esto es
Código PHP:
$newNode = &$this->getNewNode($object);// Aquí lo referencias
//...
$this->head->setNext($newNode);// Aquí ya no. $newNode ya es una referencia.
Luego tienes que asegurarte que getNewNode() reciba ese parámetro por referencia, y que además devuelva una referencia.
Tú tienes:
Código PHP:
function getNewNode(&$object){// Aquí te estás asegurando de referenciar lo que recibes, peor no lo que devuelves.
return new ListNode(&$object);// $object ya es una referencia, no debes referenciarlo aquí. Producirá Warning
}
Debería ser algo así:
Código PHP:
function &getNewNode(&$object){// Ahora también referencias lo que devuelves.
$new = &new ListNode($object);// Referencias el objeto nuevo, peor no el parámetro que envías (que ya era una referencia).
return $new;
}
Hice los cambios necesarios y al menos el ejemplo funciona bien. Por favor, verifica que todo esté correcto.
http://nuestrophp.com/Linked_List.zip
Los cambios que hice son los mismos que te expliqué más arriba, pero en todas las líneas en donde ocurre.
Saludos