public LinkedList<E> findPathAvoiding(E fromE, E toE, E avoidE) {
		clearState();

		Node<E> fromNode = findNode(fromE);
		Node<E> toNode = findNode(toE);
		Node<E> avoidNode = findNode(avoidE);
		if(avoidE != null) avoidNode.visited = true;

		LinkedList<E> pathList = new LinkedList<E>();
		Queue<Node<E>> toDoList = new Queue<Node<E>>();
		toDoList.push(fromNode);
		while (!toDoList.empty()) {
			Node<E> currentNode = toDoList.pop();
			if(currentNode.equals(toNode)) {
				while(currentNode.previousNode != null) {
					pathList.addFirst(currentNode.label);
					currentNode = currentNode.previousNode;
				}
				return pathList;
			}
			else {
				for (Edge<E> edge : currentNode.edges) {
					if(!edge.toNode.visited) {
						edge.toNode.previousNode = currentNode;
						toDoList.push(edge.toNode);
					}
				}
				currentNode.visited = true;
			}
		}
		return null;
	}