/**
  * @param RideNode $feasibleNode
  * @param RideNodeList $rideNodeList
  * @throws \Exception
  * @return mixed
  */
 private function checkIfNodeIsFeasibleForNodeList(RideNode $feasibleNode, RideNodeList $rideNodeList)
 {
     /** @var RideNode $listNode */
     $listNode = $rideNodeList->getFirstNode();
     $counter = 0;
     while (null !== $listNode) {
         if ($this->checkOverlappingNodes($feasibleNode, $listNode)) {
             // overlapping nodes
             return RideDTO::MAYBE;
         } elseif ($feasibleNode->endMinute < $listNode->startMinute) {
             // feasible node is left
             $rideNodeList->addRideNodeBeforeRideNode($feasibleNode, $listNode);
             return $this->checkEmptyRidesInNodeList($rideNodeList, $feasibleNode);
         } elseif ($listNode === $rideNodeList->getLastNode()) {
             // feasible node is right of last node
             $rideNodeList->addRideNodeAfterRideNode($feasibleNode, $listNode);
             return $this->checkEmptyRidesInNodeList($rideNodeList, $feasibleNode);
         } else {
             // feasible node is in between two nodes, check next node
             $listNode = $listNode->nextNode;
             $counter = $this->incrementAndTestLoopCounter($counter);
         }
     }
     return RideDTO::YES;
     // vehicle driving pool is empty
 }