使用链接列表确定是否正确的子集

时间:2013-12-05 04:37:39

标签: c++

我正在尝试确定两个链接列表是否是正确的子集...

不确定我是如何将其视为假,当它应该是真的时,因为P包含Q的所有元素。

2 个答案:

答案 0 :(得分:1)

每次查看时,都需要将q重置为q的开头。

为此,您需要在for循环之前保存原始节点,并且每次都重置它:

Node *q_start = q;
for(p=p; p!=NULL; p=p->next) {
    q = q_start;

这应该是最容易修复的,但不是最好的。

答案 1 :(得分:0)

如果使用P = {1,2,3}且Q = {1,2,3,4},则您提供的代码应返回true。但是,这只是因为P是Q 的子集,它的值与Q 中的值相同。如果您正在迭代P以检查每个值是否在Q中,则需要检查Q的全部 - 而不仅仅是您尚未检查的剩余部分。另外,代码

if (p!=NULL && q==NULL)
    return false;
函数顶部附近的

是不必要的,因为你还在for循环中检查q == NULL:

if(q==NULL)
      return false;