【问题标题】:What's the correct way of writing the hasNext() function in C? [closed]在 C 中编写 hasNext() 函数的正确方法是什么? [关闭]
【发布时间】:2020-06-29 19:30:45
【问题描述】:

我正在处理列表,我对 hasNext() 的工作原理有点困惑。 我以为会是这样的:

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;

提前致谢。

【问题讨论】:

  • 在非循环列表中,最后一个元素应指向NULL
  • 如果不知道您的实际列表结构以及节点字段的用途,则无法判断。
  • 如果list->currentNULLlist->current->tail 将尝试取消引用NULL
  • 这两个函数都没有多大意义。在链表上,您通常拥有对first 元素的引用,也称为head,每个元素都拥有对next 元素的引用,最后一个元素的next 属性设置为NULL ,表示没有下一个元素。该列表不包含对“当前”元素的引用,这只有您的迭代器应该知道,因此您不应该将 list 传递给函数并期望它将 current 元素排除在外它,当然你可以把它设计成那样,但它没有多大意义。
  • @Dan 这个问题应该被关闭,因为没有提供列表定义就没有意义。

标签: c list null next


【解决方案1】:

这取决于你想要做什么......


可以在尝试将某个变量推进到下一项之前调用此函数,以防止 NULL 引用

int hasNext(const listADT list) {    
   return list->current->tail!= NULL;
}

如果您一开始不担心避免 NULL 引用,则可以在您在列表中前进后调用此函数

int hasNext(const listADT list) {    
  return list->current != NULL;
}

【讨论】:

    猜你喜欢
    • 2017-04-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 2015-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多