public GraphAdj GetTransposeGraph() { GraphAdj transposeGraph = new GraphAdj(this.V); transposeGraph.adj = new List <AdjNode> [this.V]; for (int i = 0; i < this.V; i++) { transposeGraph.adj[i] = new List <AdjNode>(); //allocate actual memory } transposeGraph.Edges = new List <Edge>(); foreach (var edge in this.Edges) { transposeGraph.AddEdge(new Edge(edge.To, edge.From, edge.IsDirected, edge.Weight)); // reverse to and from } return(transposeGraph); }