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

c#高手来围观。关于c#操作双链表的remove 的复杂度的问题
关于c#操作双链表的remove 的复杂度的问题。高手介绍一下 c#操作双链表中的remove 复杂度。并且给出优化。(网上给出的优化是 创建一个字典记录node。但是不是很明白。求大神解释)
C# 链表

------解决方案--------------------
算法基本思想,找到要删除的结点,然后删除之。

删除结点的方法就是通过修改指针,很简单。所以这里最耗时的操作是怎么找到这个结点,对于双向链表,只能从表头(通过next指针)或表尾(通过previous指针)顺序地找到它,所以时间复杂度就是O(n).

你查到的优化方案,是把链表中每个结点放在一个哈希表中,这样你找到要删除结点的操作就变成了直接查找,而不是前面提到的顺序查找了,时间复杂度变为了O(1)。所以提高了效率。
------解决方案--------------------
引用:
算法基本思想,找到要删除的结点,然后删除之。

删除结点的方法就是通过修改指针,很简单。所以这里最耗时的操作是怎么找到这个结点,对于双向链表,只能从表头(通过next指针)或表尾(通过previous指针)顺序地找到它,所以时间复杂度就是O(n).

你查到的优化方案,是把链表中每个结点放在一个哈希表中,这样你找到要删除结点的操作就变成了直接查找,而不是前面提到的顺序查找了,时间复杂度变为了O(1)。所以提高了效率。

表面上看这么做提高了效率,实际上未必。因为原先我要删除链表中最后的100项,我只要处理链表倒数101项的链接关系就可以了。现在我需要遍历这些待删除项,并且更新Hash表。