Is the LinkedList in .NET a circular linked list?

后端 未结 5 1406
隐瞒了意图╮
隐瞒了意图╮ 2021-02-05 06:56

I need a circular linked list, so I am wondering if LinkedList is a circular linked list?

相关标签:
5条回答
  • 2021-02-05 07:23

    While the public API of the LinkedList is not circular, internally it actually is. Consulting the reference source, you can see how it's implemented:

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

    Of course, to hide the fact that it's circular, properties and methods that traverse the list make checks to prevent wrapping back to the 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;
    }
    
    0 讨论(0)
  • 2021-02-05 07:26

    No, its not. See MSDN

    0 讨论(0)
  • 2021-02-05 07:31

    A quick solution to using it in a circular fashion, whenever you want to move the "next" piece in the list:

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

    Where current is LinkedListNode<T>.

    0 讨论(0)
  • 2021-02-05 07:33

    No. It is a doubly linked list, but not a circular linked list. See MSDN for details on this.

    LinkedList<T> makes a good foundation for your own circular linked list, however. But it does have a definite First and Last property, and will not enumerate around these, which a proper circular linked list will.

    0 讨论(0)
  • 2021-02-05 07:43

    If you need a circular data structure, have a look at the C5 generic collections library. They have any collection that's imaginably useful in there, including a circular queue (which might help you).

    0 讨论(0)
提交回复
热议问题