我刚从教科书中得到了这个问题,但我似乎无法弄清楚答案是什么。这个问题要求"用一句话解释这个功能是做什么的,以及什么是坏的'关于这个功能?" (它与编程风格无关)。
顺便说一句,差异是什么 之间"返回f(x,p->下一个)"和" p-> next = f(x,p-> next)" ?我似乎无法弄清楚这两者之间的区别。
struct Node {
int data;
Node* next;
};
Node* f(int x, Node* p) {
if (p == nullptr) {
return nullptr;
}
else if (p->data == x) {
return f(x, p->next);
}
else {
p->next = f(x, p->next);
return p;
}
}
答案 0 :(得分:2)
f
执行的操作是遍历链接列表,删除包含值x
的所有元素。
else if (p->data == x) { // if the next element has our target value
return f(x, p->next); // make that element's next element, become our own next element
}
有什么不好的是std::vector
存在,而
vec.erase(std::remove(vec.begin(), vec.end(), x), vec.end());
不是最优雅的代码行,它比递归指针函数更容易理解和识别。
f
也会泄漏记忆。删除的元素不会被删除; f
只是覆盖知道它的位置的指针。