public void getDirectPrerequisitesList(TargetLinkedList targetLinkedList)
        {
            LinkedList <int[]> tLinkedList = targetLinkedList.TargetList;

            int[] currentHead = tLinkedList.First.Value;

            List <int[]> combinedGroupPrerequisites = joinPrereq(currentHead);

            visitedCourse[currentHead] = true;

            if (combinedGroupPrerequisites.Count == 0)
            {
                done = true;
            }
            else
            {
                foreach (int[] preArr in combinedGroupPrerequisites)
                {
                    LinkedList <int[]> newTLinkedList = new LinkedList <int[]>(tLinkedList);
                    newTLinkedList.AddFirst(preArr);
                    visitedCourse.Add(preArr, false);
                    tempTargetPath.Add(new TargetLinkedList(newTLinkedList));
                }
            }
        }
        public List <TargetLinkedList> getDirectPrerequisitesList2(TargetLinkedList targetLinkedList)
        {
            List <TargetLinkedList>  tempPath = new List <TargetLinkedList>();
            Stack <TargetLinkedList> newStack = new Stack <TargetLinkedList>();

            newStack.Push(targetLinkedList);

            int[] currentHead = new int[] { };
            tempPath.Add(targetLinkedList);

            LinkedList <int[]>      currentLinkedList = targetLinkedList.TargetList;
            List <TargetLinkedList> newPath           = new List <TargetLinkedList>(tempPath);

            while (tempPath.Count != 0)
            {
                foreach (TargetLinkedList tl in newPath)

                {
                    currentLinkedList = newStack.Pop().TargetList;
                    currentHead       = currentLinkedList.First.Value;


                    //while it's not empty, keep running
                    List <int[]> combinedGroupPrerequisites = joinPrereq(currentHead);
                    // tempPath = new List<TargetLinkedList>();

                    foreach (int[] preArr in combinedGroupPrerequisites)
                    {
                        LinkedList <int[]> newTLinkedList = new LinkedList <int[]>(currentLinkedList);
                        newTLinkedList.AddFirst(preArr);
                        //tempPath.Add(new TargetLinkedList(newTLinkedList));
                        newStack.Push(new TargetLinkedList(newTLinkedList));

                        //globalStack.Push(new TargetLinkedList(newTLinkedList));
                    }
                }



                newPath = new List <TargetLinkedList>(tempPath);
                String result = JsonConvert.SerializeObject(newPath);
                //  return result;
            }

            return(newPath);

            // }
        }