我正在尝试确定两个链接列表是否是正确的子集...
不确定我是如何将其视为假,当它应该是真的时,因为P包含Q的所有元素。
答案 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;