如何用C编程删除双链表中的节点?我做到了,但它返回了细分错误我不知道哪一部分错了

问题描述

struct someEvent
{
    int shouldRemove;
    struct someEvent *prev;
    struct someEvent *next;
} * someEvent;

struct someEvent *someEventQueue = NULL;

这部分是双向链接列表的结构代码

struct someEvent **curr = &someEventQueue; 
            if ((*curr) == NULL)
            {
                someEventQueue = &someEvent[0];
                someEventQueue->next = NULL;
                someEventQueue->prev = NULL;
            }
            else
            {

                while ((*curr)->next != NULL)
                {
                    curr = &(*curr)->next;
                }
                struct someEvent *tmp = (struct someEvent *)malloc(sizeof(struct someEvent));
                tmp = &someEvent[0];
                tmp->next = NULL;
                (*curr)->next = tmp;
                tmp->prev = (*curr);
            }

这部分是将节点插入双链表。

struct someEvent **curr5 = &someEventQueue;
            if ((*curr5) != NULL)
            {
                while ((*curr5) != NULL)
                {
                    if ((*curr5)->shouldRemove == 1)
                    {
                        if ((*curr5)->prev == NULL && (*curr5)->next == NULL)
                        {
                            (*curr5) = NULL;
                        }
                        else if ((*curr5)->prev != NULL)
                        {
                            (*curr5)->prev->next = (*curr5)->next;
                            if ((*curr5)->next != NULL)
                            {
                                (*curr5)->next->prev = (*curr5)->prev;
                            }
                        }
                        else
                        {
                            (*curr5) = (*curr5)->next;
                            if ((*curr5) != NULL)
                            {
                                (*curr5)->prev = NULL;
                            }
                        }
                    }
                    curr5 = &(*curr5)->next;
                }
            }

此部分正在删除节点。在执行此操作之前,我检查了所有必须删除的节点,并使用shouldRemove进行了标记。如果shouldRemove为1,则该节点将被删除。我认为没有问题,但是当我调试此代码时,它会在while ((*curr5) != NULL)中返回分段错误(此代码删除节点部分的第4行。)我确实尽力解决了此问题,但我认为可以解决这个问题..请给我一些建议。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)