Optimized algorithm execution time

Using new list for each pass with List.Add instead of List.RemoveAt