从c中删除链接列表中的项目

时间:2013-05-09 19:04:13

标签: c linked-list

如何从c。

中删除链接列表中的项目
typedef struct
{
    int n;
    struct item *nexI;

} item;


#define na 1000
int n, j;

我的主要内容是:

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;
        }
    }

}

但是这段代码给了我一个分段错误,我不知道为什么,你能算出我在这里做错了吗?

1 个答案:

答案 0 :(得分:2)

严格按照您的代码进行操作,我会猜测它是关于未初始化的指针。

首先声明指针数组时,需要初始化指向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)这样的检查不行。