C - 哈希表键的链表

标签 c linked-list hashtable

我尝试创建一个函数,输入哈希表并返回键的链接列表。 这是列表节点的结构:

struct hash_table_key_list_node_s {
  char *key;
  struct hash_table_key_list_node_s* next;
};

typedef struct hash_table_key_list_node_s hash_table_key_list_node_t;
typedef hash_table_key_list_node_t* hash_table_key_list_t;

我不明白为什么列表只包含一个元素,而哈希表包含 330 个元素。 这是函数的代码:

hash_table_key_list_t hash_table_keys(hash_table_t hash_table) {



hash_table_key_list_t list, tail, p;
  list = tail = NULL;

  if ( hash_table != NULL && hash_table->slots != NULL ) {

    size_t index = 0;
    while ( index < hash_table->capacity ) {

      hash_table_list_node_t *node = hash_table->slots[index].head;
      while ( node != NULL ) {

        p = malloc(sizeof(hash_table_key_list_node_t));
        p->key = strdup(node->key);

        if ( node != NULL ) {
          list = tail = p;
        }
        else { 
          tail->next = p;
          tail = p;
        }

        node = node->next;
      }

      index++;
    }
  }

  return list; 
}

最佳答案

列表插入逻辑中存在错误:

if (node != NULL) {

应该是:

if (list == NULL) {

由于 node 在这一点上始终不是 NULL 因为它是您循环的条件并且您实际上想要检查这是否是要插入的第一个条目新链接列表(检查 list 是否为 NULL 将实现此目的)。请注意,在将其添加到列表之前,您还应该检查您的 mallocstrdup 是否成功,清理链接列表(释放列表的分配部分)并返回某种类型如果没有足够的内存来从表中创建列表,则错误指示。

关于C - 哈希表键的链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55973317/

相关文章:

谁能解释并跟踪以下多重递归 C 程序?

局部变量地址可以保留在返回指针的函数中吗

c - 在哪里可以找到软乘法和除法算法?

c++ - 如何向链表中的节点插入多个值

java - 如何从链表中删除重复的节点?

c - 我的链接列表中的打印功能不断出现错误,我不知道这些错误告诉我什么

c - 访问指针元素时出现段错误

hashtable - 哈希表线性探测的运行时间

arrays - 在 PowerShell 中通过引用传递/更新哈希表和数组

hashtable - dynamodb 表中的哈希范围有什么用?