如何从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)
之类的检查将不起作用。