.NET中的LinkedList是循环链表吗?

时间:2009-06-22 16:44:47

标签: c# .net linked-list

我需要一个循环链表,所以我想知道LinkedList是否是循环链表?

5 个答案:

答案 0 :(得分:57)

当您想要移动列表中的“下一个”部分时,以循环方式使用它的快速解决方案:

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

当前为LinkedListNode<T>

答案 1 :(得分:16)

没有。它是一个双向链表,但不是循环链表。请参阅MSDN for details on this

链表&LT; T&GT;但是,为您自己的循环链表奠定了良好的基础。但它确实有一个明确的First和Last属性,并且不会枚举这些属性,这是一个合适的循环链表。

答案 2 :(得分:6)

如果您需要循环数据结构,请查看C5 generic collections library。他们有任何可以在其中使用的集合,包括circular queue(这可能会对你有所帮助)。

答案 3 :(得分:4)

不,不是。 See MSDN

答案 4 :(得分:4)

虽然LinkedList的公共API不是循环的,但实际上是内部的。咨询reference source,您可以看到它是如何实现的:

// 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;
}