【发布时间】:2014-02-26 16:09:21
【问题描述】:
我是 C 的新手,我试图编写一个递归搜索链表的方法,但是我没有成功。如果在链表的任何节点中都没有找到该名称,则该函数包含返回 0,并且找到了 1。我似乎陷入了无限循环。任何帮助将不胜感激!
#include<stdlib.h>
#include<string.h>
struct node
{
char name[1000];
struct node *next;
};
int contains(const struct node *pNode, const char *name)
{
int i;
int length = strlen(name);
int isEqual = 0;
while (pNode != NULL)
{
isEqual = 1;
for (i = 0; i < length; i++)
{
if (pNode->name[i] != name[i])
{
isEqual = 0;
}
}
}
contains(pNode->next, name);
return isEqual;
}
main()
{
struct node node1 = { "Sam", NULL };
struct node *node1Ptr = &node1;
struct node node2 = { "Anna", node1Ptr };
struct node *node2Ptr = &node2;
struct node node3 = { "Adam", node2Ptr };
struct node *node3Ptr = &node3;
int n, k;
// testing for a name that is the list
n = contains(node3Ptr, "Sam");
printf("%d\n", n);
// testing for a name that is not in the list
k = contains(node3Ptr, "Max");
printf("%d\n", k);
}
【问题讨论】:
-
递归调用
contains(pNode->next, name);忽略返回值,所以没有效果。您比较字符串的方式也是错误的;它将在使用子字符串作为名称参数时创建(例如:“Sa”)