Эта опция предполагает, что вы знаете количество (если это не один проход уже пройден), или если вы не можете использовать один проход, тогда просто установите для счетчика какое-то разумное большое максимальное максимальное значение верхнего предела. .
long count = 10000; // set this to whatever the count is, or calcualte it
string filename = @"c:\foo.out";
using (StreamWriter writer = new StreamWriter(filename))
{
int index = 0;
long maxLength = 12; // set this to the max length of an item + 2 (for /r/n)
while(values.Next())
{
writer.BaseStream.Seek(maxLength * (count - index - 1), SeekOrigin.Begin);
writer.WriteLine(values[index].ToString().PadLeft(maxLength));
writer.Flush();
index++;
}
}
Вывод будет в файле c:\foo.out
, дополненном пробелами. Поскольку в вопросе не указывалось, где нужно выводить данные или в каком формате должен быть вывод (например, не включать пустые строки заранее). Учитывая, что это связанный список, длина может быть очень большой (>int.MaxValue
), так что запись вывода в файл является вполне приемлемым транспортным форматом.
Этот ответ соответствует как O(n)
производительности записи (и даже один проход ), так и при этом не используется дополнительная память, чем выходной поток, который всегда собирается , должен быть O(n)
потому что, как еще вы поместите их все на экране ..
Ответом на этот ответ будет то, что вы не можете seek
в обратном направлении в выходном потоке, затем просто напечатаете \r
возвращаемый символ и ищите в обратном направлении таким образом, не получая ответа от интервьюера, спрашивающего, идентифицируете ли вы или встречаетесь Невозможные требования являются частью описания работы.