我已經編寫了一個代碼,用於從單個鏈接列表中刪除節點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