在这段代码中,我比较了两个链表,并检查链表中的项是否相等。
bool Check(Node *listA, Node *listB) {
if (listA == NULL && listB == NULL)
return true;
if (listA->item == listB->item)
{
listA = listA->link;
listB = listB->link;
return Check(listA, listB);
}
return false;
}
我想知道这段代码之间的区别:
listA = listA->link;
listB = listB->link;
return Check(listA, listB);
,这是:
return Check(listA->link, listB->link);
这两段代码都产生了正确的答案,但我似乎不明白它们有什么区别。
没有区别,它们做的是完全一样的事情。唯一的区别是,如果需要,可以在下一个节点中更改一些内容,然后再调用Check()。但在你的情况下,它们是完全相同的,第二个选项更干净,所以我推荐那个。
一般来说,修改In参数值会使函数的代码和意图变得不那么清晰,所以最好避免这样做。
还要考虑,如果您正在使用调试器并退回到先前的递归调用,您将无法看到检查的正确节点,因为它的指针已经被覆盖。这样调试起来会更混乱。
实际上,两个函数的结果是相同的。由于跳过了两个无意义的赋值操作,第二种方法可能会快得多,除非它被优化掉了。