c - 过滤链表并返回新的链表 C

标签 c linked-list hashtable

我正在尝试过滤链表。由于我不想更改原始链表,因此我想创建一个子链表并将其返回。

我遇到了麻烦,因为我只知道如何从过滤过程中获取 1 个节点,但我不知道如何移动并将节点从原始链表添加到子链表。

我有一个这样的结构(这代表哈希表中的一个条目):

typedef struct Entry {
   char *word;
   int len;
   struct Entry *next;
} Entry;

我的过滤器函数将接收单词长度和原始链表作为参数,然后找到具有相同 len 值的节点。每当它找到一个具有相同 len 值的节点时,它就会将该节点添加到另一个链表中。最后返回新的链表。

struct Entry* filterLen(int len, struct Entry *en) {
   struct Entry *temp = (struct Entry *)malloc(sizeof(struct Entry));

   while(en->next != NULL) {
      if (en->len == len) {
         // assign values to temp list
         temp->word = en->word;
         temp->len = en->len;
         temp->next = en;
      }

      en = en->next; // move through list
   }

   return temp;
}

最佳答案

Entry* filterLen(int len, Entry *en) {
    Entry result = { NULL, 0, NULL };
    Entry *curr  = &result;

    while(en != NULL){
        if(en->len == len){
            Entry *temp = malloc(sizeof(*temp));
            *temp = *en;
            temp->next = NULL;
            curr = curr->next = temp;
        }
        en = en->next;
    }
    return result.next;
}

关于c - 过滤链表并返回新的链表 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31373932/

相关文章:

c - 名为 "cell"的结构的免费二维数组(矩阵),其中每个都是字符串(char *)的成员

Java 哈希表问题

.net - 哈希表如何绑定(bind)到下拉列表?

c - 隐藏命令行程序中的用户输入

c - 为什么我会在 C 中收到此错误?不兼容的类型

java - 将文本文件输入插入链接列表

c - 与程序堆栈执行相关的链表程序流程

c++ - 在这部分代码中插入 "item"的位置

C桶字符串

c - 在不使用结果的情况下将结构指针转换为 void 的目的