2010-10-08 77 views
2

我对LinkedList<>有疑问。
该列表有属性FirstLastLinkedList,First and Last

如果我将设置Last.AddNext(First),那么属性是否正确?

我需要一个清单,其中Last>Next = First,但清楚地标识FirstLast元素。

我有一个周期process.NextStep, NextStep,但需要能够识别每个步骤(process[i] - 所述个工序)

.NET 2

+0

你的意思是你试图建立一个循环列表?我怀疑你可以用默认类做到这一点。我期望'Last.AddNext(First)'将第一个元素的副本追加到列表的末尾,但不会创建循环。 – Rup 2010-10-08 13:20:09

回答

3

LinkedList<T>不支持圆形列表。从the docs

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)

+0

e ...这意味着什么,或者...我可以用它取代它...我认为这是一个常见问题,应该有一个共同的解决方案... – serhio 2010-10-08 13:28:59

+0

@serhio:看我的编辑。 – 2010-10-08 13:30:20

+0

元组是什么,是.NET 2还是自定义类? – serhio 2010-10-08 13:34:44

1

有关于如何在C#中编写循环列表的一些信息,请参阅here

+0

“使用简单列表类来存储您的联系人”...很酷的解决方案。 – serhio 2010-10-08 13:31:22

+0

@serhio - 除了该列表中接受的答案外,还有其他答案 – 2010-10-08 13:33:34

相关问题