我已经编写了一个代码,用于从单个链接列表中删除节点a。我测试过这段代码,输出很好。我对这段代码中最后的“else”块有些困惑。这是对的吗? 我的意思是,释放(p-> ptr)节点后,我仍然可以访问它旁边的节点吗?这段代码是否正确地从链表中删除节点?
NODE* delNODE(NODE *HEAD,int position){
int k=1;
NODE *p;
if(HEAD==NULL){
printf("List Empty\n");
return HEAD;
}
p=HEAD;
if(position==1){
p=HEAD;
HEAD=HEAD->ptr;
free(p);
printf("Success!\n");
return HEAD;
}
else{
while(k<position-1){
k++;
p=p->ptr;
}
if((p->ptr)==NULL)
{
printf("NO such position\n");
}
else{
free(p->ptr);
p->ptr=p->ptr->ptr;
printf("Success!\n");
}
}
return HEAD;
}
@pala做同样的情况也会是不正确的。 – 2014-10-16 11:53:10