从c中的链表中删除一个项目



如何从c中的链表中删除Item。

typedef struct
{
    int n;
    struct item *nexI;
} item;

#define na 1000
int n, j;

我的main中有:

item * list[na];
n = 5;
for(j = 0; j < na; j++)
    remove_elem(list, n, j);

现在我的函数remove_elem:

void remove_elem(item * list[], int n, int pos)
{
    int i;
    item * aux;
    item * sec;

    aux = list[pos]->nexI;
    if(aux == NULL)
        return;
    else
    {
        sec = (item *)aux->nexI;
        if(aux->n == n)
        {
        list[pos]->nexI = sec;
            return;
        free(aux);
        }
        while(sec != NULL)
        {
            if(sec->n == n)
            {
                aux->nexI = sec->nexI;
                free(sec);
                return;
            }
        aux = (item *) aux->nexI;
        sec = (item *) sec->nexI;
        }
    }

}

但是这段代码给了我一个分割错误,我不能注意到为什么,你能弄清楚我在这里做错了什么吗?

严格按照你的代码,我敢打赌,这是关于未初始化的指针。

首先,当你声明指针数组时,你需要初始化所有指向NULL的指针:

item * list[na] = { NULL };

然后你应该检查所有函数中的NULL指针:

void remove_elem(item * list[], int n, int pos)
{
    if (list[pos] == NULL)
        return;
    /* ... */
}

当然,当你分配一个新节点放入列表时,你当然也必须将nexI指针设置为NULL,否则if(aux == NULL)之类的检查将不起作用。

相关内容

  • 没有找到相关文章

最新更新