【发布时间】:2012-04-12 16:12:36
【问题描述】:
我们必须检查两个给定的链表是否包含相同的数据。这种情况下的顺序无关紧要,这意味着{1,3,2} 和{2,1,3} 相同。我认为我们应该引入一个新变量counter=0 并执行以下过程:
while(node1->next!=NULL)
{
int value=node1->value;
if(contains(node2,value)){
counter++;
}
node1=node1->next;
if(counter== number of elements in node 1)
return true;
else return false;
}
另一种方法是对两个列表进行排序并逐个节点进行比较。哪一个是最优的?在第一种情况下,它需要 O(n^2) 次操作,而在第二种情况下,如 Nlog(N)+O(N),(如果我们使用归并排序)。我的想法是对的吗?还是有其他最优方法?
【问题讨论】:
-
真正的答案是:如果必须这样做,首先不要使用链表!
-
你对内存复杂度有限制吗?-如果没有,可以在 O(n) 内存和 O(m+n) 时间内实现它,当 n 和 m 是列表的长度时. 可以通过使用 hashmap 或或某种位图来实现
-
使用哈希图怎么样?我对重复元素持怀疑态度。
-
@Jerry Coffin 我明白了,只是编程书上的问题
标签: c++ linked-list compare