LinkedList, Первый и Последний - PullRequest
       13

LinkedList, Первый и Последний

2 голосов
/ 08 октября 2010

У меня вопрос по поводу LinkedList<>.
Есть свойства этого списка First и Last.

Исправятся ли эти свойства, если я установлю Last.AddNext(First)?

Мне нужно иметь список, где Last>Next = First, но четко идентифицировать элементы First и Last.

У меня есть цикл process.NextStep, NextStep, но я должен быть в состоянии идентифицировать каждый шаг (process[i] - i -й шаг)

.NET 2

Ответы [ 2 ]

3 голосов
/ 08 октября 2010

LinkedList<T> не поддерживает циклические списки.Из документов :

Класс LinkedList<T> не поддерживает формирование цепочек, разбиение, циклы или другие функции, которые могут оставить список в несогласованном состоянии.

Нет такого метода, как LinkedListNode<T>.AddNext(), но я ожидаю, что любая попытка вызвать сбой цикла с исключением.

Вы всегда можете построить итератор на основе на LinkedList<T> хотя ...

(Обратите внимание, что произойдет сбой, если список пуст ...)

public static IEnumerable<Tuple<T, bool, bool>> IterateInCycles<T>
    (LinkedList<T> source)
{
    LinkedList<T> node = source.First;
    while (true)
    {
        yield return Tuple.Create(node.Value,
                                  node.Previous == null,
                                  node.Next == null);
        node = node.Next ?? source.First;
    }
}

Каждый кортеж в последовательности возврата будет (value, isFirst, isLast)если вы понимаете, о чем я.

1 голос
/ 08 октября 2010

Здесь есть некоторая информация о том, как создавать круговые списки в C # .

...