繁体   English   中英

如何在C中的双向链接列表中搜索名称并删除节点?

[英]How to search name and delete node in doubly linked list in C?

我想在我的双向链接列表中搜索名称并删除,但是最后我遇到了分段错误(核心转储)错误。

typedef struct NODE {
  char *name;
  struct NODE *next;
  struct NODE *prev;
} node_t;

void delnode(struct NODE** head, char* search_name) {
                    struct NODE* search_node = 
                           (node_t*)malloc(sizeof(node_t));
                    struct NODE* current = *head;
                    search_node->name = search_name;
                    while(current->name!=search_name)
                        current = current->next;
                    current->prev->next = current->next;
                    current->next->prev = current->prev;
                    current->prev = NULL;
                    current->next = NULL;
}

并且不要忘记更新*head的值。 我将尝试将所有评论总结如下:

void delnode(struct NODE** head, char* search_name) {
    struct NODE* current;
    for(current=*head; current; current = current->next) {
        if (!strcmp(current->name, search_name)) {
            if (current->next)
                current->next->prev = current->prev;
            if (current->prev)
                current->prev->next = current->next;
            if (current == *head)
                *head = current->next;
            current->prev = NULL;
            current->next = NULL;
            free(current);
            return;
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM