Связан ли LinkedList в .NET с круговым списком?

Мне нужен круговой связанный список, поэтому мне интересно, является ли LinkedList круговой связанный список?

Ответы

Ответ 1

Нет. Это двусвязный список, но не круговой связанный список. Подробнее см. MSDN.

LinkedList < Т > тем не менее, делает хорошую основу для вашего собственного кругового связанного списка. Но у него есть определенное свойство First и Last, и он не будет перечислять вокруг них, который будет иметь правильный круговой связанный список.

Ответ 2

Быстрое решение использовать его круговым способом, когда вы хотите переместить "следующий" фрагмент в списке:

current = current.Next ?? current.List.First;

Где ток LinkedListNode<T>.

Ответ 5

Хотя публичный API LinkedList не является круговым, на самом деле это на самом деле. Консультируя справочный источник , вы можете увидеть, как он реализован:

// This LinkedList is a doubly-Linked circular list.
internal LinkedListNode<T> head;

Конечно, чтобы скрыть тот факт, что он циклический, свойства и методы, которые пересекают список, делают проверки, чтобы предотвратить обертывание назад в голову.

LinkedListNode:

public LinkedListNode<T> Next {
    get { return next == null || next == list.head? null: next;}
}

public LinkedListNode<T> Previous {
    get { return prev == null || this == list.head? null: prev;}
}

LinkedList.Enumerator:

public bool MoveNext() {
    if (version != list.version) {
        throw new InvalidOperationException(SR.GetString(SR.InvalidOperation_EnumFailedVersion));
    }

    if (node == null) {
        index = list.Count + 1;
        return false;
    }

    ++index;
    current = node.item;   
    node = node.next;  
    if (node == list.head) {
        node = null;
    }
    return true;
}