如何使用O(n)时间和O(1)空间删除单链表上的重复元素?

时间:2013-08-19 15:47:55

标签: list duplicates singly-linked-list

如何使用O(n)时间和O(1)空间删除单链表上的重复元素?

元素可以是任何字符,数字,也不会被排序。

例如,给定8 - > 6 - > 7 - > 6 - > 5

返回8 - > 6 - > 7 - > 5

O(1)空间似乎很难?

2 个答案:

答案 0 :(得分:0)

你不能因为你无法在复杂度小于O(logn)的列表中搜索....我们必须在删除isnt之前搜索重复项?然后对于每个元素你必须做同样的事情,因此它将是O(nlogn)。这个列表有任何专长,然后可以使用替代逻辑。指定是否有?

答案 1 :(得分:0)

有几种不同的方法可以做到这一点:

  1. 遍历链表并构建一个Hash表,用于存储数据及其频率。当您遍历时,如果您遇到频率值> 1,您可以从列表中删除相应的节点。由于使用了哈希表,这将给O(n)时间但是O(n)空间。

  2. 降低解决方案1中O(n)空间复杂度的一种方法是:如果您知道输入元素的范围,则可以使用固定大小的数组而不是哈希表。这将使其成为O(n)时间和O(1)空间。

  3. 这是通过反复遍历链表但在没有使用任何额外内存的情况下用o(n2)组成的时间,可以实现。

  4. 由于假设输入数组没有排序,所以没有额外的内存就无法做到这一点。