如何解决如何使用 C++ 递归查找链表中数据的索引?
本质上,被搜索的列表和元素被传递给函数。该函数应该返回元素在列表中的位置。我附上了我尝试过的东西。在调用此函数时有 11 个元素的测试程序中,如果元素在列表中,则结果始终为 1,如果不在列表中,则正确返回 -1。
template <class T>
int getPosition(Node<T>* head,T element)
{
int pos = 1;
if (head == nullptr) {
return -1;
}
if (head->data == element) {
return pos;
}
return getPosition(head->next,element);
}
解决方法
您的 pos 值始终为 1。试试这个。
template <class T> int getPosition(Node<T>* head,T element,int pos = 0) {
if (head == nullptr) {
return -1;
}
if (head->data == element) {
return pos;
}
return getPosition(head->next,element,pos +1);
}
,
递归的结果始终为 1 或 -1 - 您缺少 + 1
。
因为你是从一开始编号的:
- 如果列表为空,则索引为-1
- 如果头部包含您要查找的值,则索引为 1
- 否则,在尾部查找值,然后
- 如果在那里找到值,则索引比尾部索引多 1
- 如果未找到,则索引为 -1
翻译:
template <class T>
int getPosition(Node<T>* head,T element)
{
if (head == nullptr) {
return -1;
}
if (head->data == element) {
return 1;
}
int tailPosition = getPosition(head->next,element);
return tailPosition < 0 ? -1 : tailPosition + 1;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。