| 
<?php
/**
 * <p>Title: Double linked list</p>
 * <p>Description: Implementation of a double linked list in PHP</p>
 * @author Oddleif Halvorsen | [email protected]
 * @version 1.2
 */
 
 include_once("Iterator.php");
 
 class ListIterator extends Iterator{
 
 /**
 * Constructs a ListNode.
 * @param &$head The start of the list
 * @param &$list The LinkedList, nessesary for updating the size of the list on removal of nodes.
 */
 function ListIterator(&$head, &$list){
 parent::Iterator(&$head, &$list);
 }
 
 /**
 * Checks if more nodes exist
 * @return TRUE == hasNext || FALSE == no next node.
 */
 function hasPrevious(){
 //it has a previous value if $this->previous != NULL or current node is set an has a previous value set.
 return (($this->currentNode != NULL && $this->currentNode->getPrevious() != NULL) || $this->previousNode != NULL ? TRUE : FALSE);
 }
 
 /**
 * Get the reference to the previous node.
 * @param &$node The next node. || FALSE if no next node exists.
 */
 function getPrevious(){
 if($this->hasPrevious()){
 $this->currentNode = &$this->currentNode->getPrevious(); //current is the node between previous and next
 $this->previousNode = &$this->currentNode->getPrevious(); //previous is the node closer to head
 $this->nextNode = &$this->currentNode->getNext(); //next is the node closer to tail
 
 return $this->currentNode->getNodeValue();
 }
 
 return FALSE;
 }
 }
 ?>
 |