什么';用C编写hasNext()函数的正确方法是什么?
我正在处理列表,对于hasNext()如何工作,我有点困惑。 我以为会是这样的:什么';用C编写hasNext()函数的正确方法是什么?,c,list,null,next,C,List,Null,Next,我正在处理列表,对于hasNext()如何工作,我有点困惑。 我以为会是这样的: int hasNext(const listADT list) { return list->current->tail!= NULL; } int hasNext(const listADT list) { return list->current != NULL; } 但我看到它是这样写的: int hasNext(const listADT list) {
int hasNext(const listADT list) {
return list->current->tail!= NULL;
}
int hasNext(const listADT list) {
return list->current != NULL;
}
但我看到它是这样写的:
int hasNext(const listADT list) {
return list->current->tail!= NULL;
}
int hasNext(const listADT list) {
return list->current != NULL;
}
我不确定哪一个是正确的。我认为最后一个元素应该指向NULL。如果情况并非如此,并且第二个版本是正确的,那么这是否意味着NULL被算作列表的最后一个元素
编辑:我试图编写一个listADT来处理列表。一般来说,除了使用一个函数返回1(如果当前节点有下一个节点)外,我没有其他具体的操作
下面是列表的结构:
typedef struct listCDT {
struct node * first;
size_t size;
node * current;
} listCDT;
以及节点的:
typedef struct node {
elemType elem;
struct node * tail;
} node;
提前谢谢。这取决于你想做什么
在尝试将某个变量前进到下一项之前,可以调用此函数,以防止空引用
int hasNext(const listADT list) {
return list->current->tail!= NULL;
}
如果您一开始不担心避免空引用,那么可以在列表中升级后调用此函数
int hasNext(const listADT list) {
return list->current != NULL;
}
在非循环列表中,最后一个元素应指向
NULL
。如果不知道实际列表结构以及节点字段的使用方式,则无法判断。如果list->current
为NULL
,list->current->tail
将尝试取消对NULL
的引用。这两个函数都没有多大意义。在链表上,您通常持有对第一个
元素的引用,也称为头
,每个元素持有对下一个
元素的引用,最后一个元素的下一个
属性设置为空
,表示没有下一个元素。列表中没有对“current”元素的引用,这是只有迭代器才应该知道的,因此您不应该将列表
传递给函数,并期望它将当前
元素从中分离出来,当然,您可以将其设计为这样,但它没有多大意义。@Dan问题应该结束,因为如果没有提供列表定义,它就没有意义。