【发布时间】:2020-10-15 07:15:13
【问题描述】:
我有两个函数,一个是帮助函数,它使递归计算重复项的数量。
对于带有 {97,92,97,80,97} 的单链表,结果应该是 3(因为 97 重复了 3 次),但是它返回 1。为什么会这样?
template <typename Data_t>
Data_t SLinkedList<Data_t>::Freq() {
Node* ptr = _head;
Data_t element;
ptr->_data = element;
return FreqHelper(element);
}
template <typename Data_t>
Data_t SLinkedList<Data_t>::FreqHelper(Data_t element) {
unsigned int count = 0;
if(empty()) {
return 0;
}
else if(_head->_data == element) {
_head = _head->_next;
FreqHelper(_head->_next->_data);
count++;
}
return count;
}
【问题讨论】:
-
为什么你的
Freq函数会覆盖头节点的data? -
此外,您通常希望使用递归函数的计算值,而您的
FreqHelper不会这样做(它完全忽略调用的结果) -
尝试用
count += FreqHelper(_head->_next->_data);替换FreqHelper(_head->_next->_data); count++;
标签: c++ recursion singly-linked-list