var stack = new Stack<Node<T>>(); var visited = new HashSet<Node<T>>(); var res = new List<Node<T>>(); stack.Push(start); while (stack.Count > 0) { var node = stack.Pop(); if (visited.Contains(node)) continue; visited.Add(node); res.Add(node); var adjNode = graph[node].FirstAdjNode; while (adjNode != null) { stack.Push(adjNode.Data); adjNode = adjNode.Next; } } return res; } }
var queue = new Queue<Node<T>>(); var visited = new HashSet<Node<T>>(); var res = new List<Node<T>>(); queue.Enqueue(start); while (queue.Count > 0) { var node = queue.Dequeue(); if (visited.Contains(node)) continue; visited.Add(node); res.Add(node); var adjNode = graph[node].FirstAdjNode; while (adjNode != null) { queue.Enqueue(adjNode.Data); adjNode = adjNode.Next; } } return res; }