我用C语言写了一个链表的实现(有两个点,一个用于下一个值,一个用于前一个值),我想测试我的代码。
我检查了它的扫描和打印是正确的,然而,当我试着测试我写的代码来查找list中的值时,它返回了不正确的输出。
查找列表的代码为:
node* find_in_list(node *anchor,data_type x)
{
node *temp;
int is_empty=0;
is_empty=is_list_empty(anchor);
if(is_empty)
return NULL;
temp=anchor->next;
while(temp!=NULL)
{
if(temp->data==x)
return temp;
temp=temp->next;
}
return temp;
}
检查列表是否为空的代码为
int is_list_empty(node *anchor)
{
int boolean=0;
if(anchor->next=NULL)
boolean=1;
return boolean;
}
应该注意的是,锚永远不会改变。我将锚定义为链表中没有实际值的节点,而只是将其用作指向第一个"真实"节点的指针。
void main是
#include "linked_list.h"
void main()
{
data_type num;
node *anchor;
anchor=create_node();
scan_list(anchor);
printf("The list scanned is n");
print_list(anchor);
printf("Enter the number you wish to findn");
scanf("%d",&num);
printf("The address of %d isn",num);
printf("%p",find_in_list(anchor,num));
getch();
}
扫描打印正常。它确实打印了正确的列表,但是当我试图打印列表中某个值的地址时(不管我输入什么值),它返回000000。
有什么问题吗?
我知道你已经解决了你的问题,但最终一个更直接的算法可能会首先阻止你的问题。
从优雅/美观/简单的角度来看,在去掉is_list_empty()
例程后,我会将find_in_list()
重写为如下内容:
node* find_in_list(node *list,data_type x)
{
for(;list;list=list->next)
if(list->data==x)
break;
return list;
}
(编辑为for-loop)