【发布时间】:2020-03-08 12:11:32
【问题描述】:
这是一个使用递归从链表中搜索数字的程序。
#include <iostream>
using namespace std;
class node {
public:
int data;
node *next;
void create(int *,int);
int max(node*,int);
};
node *first;
void node::create(int a[],int n) {
first = new node;
first->data = a[0];
first->next = NULL;
node *last = first;
for (int i = 1; i < n; i++) {
node *t = new node;
t->data = a[i];
t->next = NULL;
last->next = t;
last = t;
}
}
int node::max(node *l, int p) {
if (l->data == p) {
return 1;
}
if (l == 0)
return 0;
else {
max(l->next, p);
return 0;
}
}
int main() {
int a[5] = {1,2,3,4,5};
node m;
m.create(a,5);
cout << m.max(first, 3);
return 0;
}
【问题讨论】:
-
max函数实际上应该做什么?顾名思义,它会找到一个最大值,但它肯定不会这样做。 -
虽然有预感,但请仔细查看这两行代码:
max(l->next, p); return 0;他们到底在做什么,这是您想要的吗? -
if (l->data == p) { return 1; } if (l == 0) return 0; ...在检查l == 0之前你真的应该使用l->data吗?取消引用空指针是未定义的行为,可能会导致时间旅行devblogs.microsoft.com/oldnewthing/20140627-00/?p=633 -
不要比较指向
0的指针。与nullptr或NULL进行比较。很明显,l是它所使用的上下文中的指针。 -
@NateEldredge 实际上我只是弄错了搜索的标准名称,即我可以写 search() 而不是 max() ?感谢您的宝贵意见
标签: c++ recursion linked-list linear-search