Ver Mensaje Individual
  #2 (permalink)  
Antiguo 08/07/2005, 13:18
Avatar de jpinedo
jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 20 años, 7 meses
Puntos: 41
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