我正在尝试过滤链表。由于我不想更改原始链表,因此我想创建一个子链表并将其返回。
我遇到了麻烦,因为我只知道如何从过滤过程中获取 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/