日期:2014-05-17  浏览次数:20768 次

求教LinkedList问题
MSDN上说

LinkedList<T> 提供 LinkedListNode<T> 类型的单独节点,因此插入和移除的运算复杂度为 O(1)。

可是我觉得它的Remove方法应该不可能达到O(1)吧,他怎么实现查询的

另外请教大家对于LinkedList<T>,我需要把某个节点调整到队首,正确的做法是什么?
我现在是下面的写法,但我觉得效率不高,100000次花上了30秒

list.Remove(obj);
list.AddFirst(obj);

------解决方案--------------------
LinkedList有两个Remove版本,一个参数是T,这个版本的时间复杂度是O(n),而另一个版本参数是LinkedListNode<T>,这个版本的时间复杂度是O(1);

你的这两个语句,第二句的效率很高,可以不用改,主要是第一句效率低,
list.Remove(obj);
list.AddFirst(obj);

改进的方法是用Remmove(LinkedListNode<T>)这个版本删除节点,