public void CreateNodes()
        {
            foreach (KeyValuePair <string, string> nodeItemStrings in _nodes)
            {
                INode newNode = (INode)NodeFactory.CreateNode(nodeItemStrings.Value);
                newNode.Id   = nodeItemStrings.Key;
                newNode.Type = nodeItemStrings.Value;
                if (nodeItemStrings.Value == "and")
                {
                    newNode.PropogationDelay = AND.accept(delayCalc);
                }
                else if (nodeItemStrings.Value == "nand")
                {
                    newNode.PropogationDelay = NAND.accept(delayCalc);
                }
                else if (nodeItemStrings.Value == "nor")
                {
                    newNode.PropogationDelay = NOR.accept(delayCalc);
                }
                else if (nodeItemStrings.Value == "not")
                {
                    newNode.PropogationDelay = NOT.accept(delayCalc);
                }
                else if (nodeItemStrings.Value == "or")
                {
                    newNode.PropogationDelay = OR.accept(delayCalc);
                }
                else if (nodeItemStrings.Value == "probe")
                {
                    newNode.PropogationDelay = PROBE.accept(delayCalc);
                }
                else if (nodeItemStrings.Value == "xor")
                {
                    newNode.PropogationDelay = XOR.accept(delayCalc);
                }
                else
                {
                    newNode.PropogationDelay = 15;
                }
                AllNodes.Add(newNode);
            }

            // Link edges aan nodes
            foreach (var node in AllNodes)
            {
                List <string> linkedEdges;
                if (_edges.TryGetValue(node.Id, out linkedEdges))
                {
                    foreach (var linkedEdgeString in linkedEdges)
                    {
                        INode linkedNode = AllNodes.First(item => item.Id == linkedEdgeString);
                        linkedNode.PreviousNodes.Add(node);
                        node.NextNodes.Add(linkedNode);
                    }
                }
                else
                {
                    Console.WriteLine("Final node: " + node.Id);
                    EndNodes.Add(node);
                }
            }

            bool noErrors = true;

            // Check op fouten m.b.t connecties
            foreach (var node in AllNodes)
            {
                // Probe moet PreviousNodes of NextNodes hebben, Alle andere nodes moeten zowel PreviousNodes als NextNodes hebben
                if (node.GetType() == typeof(Probe) && (node.PreviousNodes.Count == 0 && node.NextNodes.Count == 0) || node.GetType() != typeof(Probe) && (node.PreviousNodes.Count == 0 || node.NextNodes.Count == 0))
                {
                    Console.WriteLine("Er is een node binnen je circuit aanwezig die een foute connectie heeft!");
                    noErrors = FoundError();
                    break;
                }
            }

            // Check op infinite loops
            foreach (var node in EndNodes)
            {
                List <INode> routeVisited = new List <INode>();
                if (!HasNoInfiniteLoop(node, routeVisited))
                {
                    Console.WriteLine("Er is een infinite loop binnen je circuit aanwezig!");
                    noErrors = FoundError();
                    break;
                }
            }
            if (noErrors)
            {
                Console.WriteLine("Nodes en edges zijn aangemaakt en gelinkt!");
            }
        }