私はポインタの仕組みを知っています。なぜ* headの代わりに** headが使用されていますか?
私はこのよう作業と、彼らは
deleteNode(struct node **head_ref, int key);
も正しいを使用していたが、そうする理由があるhttp://quiz.geeksforgeeks.org/linked-list-set-3-deleting-node/ここに@、第一1に障害が発生しますされ
deleteNode(struct node *head_ref, int key);
と同様の問題をやっどんな状態であってもかまわない。
struct linked_list *deleteNode(struct linked_list *head, int key)
{
struct linked_list *prevNode,*current,*temp;
if(head==NULL)
return head;
if(head->data==key)
{
if(head->next==NULL)
{ free(head);
return NULL;
}
else
temp=head->next;
free(head);
return temp;
}
prevNode= head;
current=head->next;
printf("\n %d\n",(current->data));
while((current!=NULL) && (current->data!=key))
{ printf("\n here");
prevNode= current;
current=current->next;
}
if(current==NULL){
printf("\n element not present in list !\n");
return head;
}
if(current->next==NULL)
prevNode->next=NULL;
else
prevNode->next=current->next;
free(current);
return head;
}
head=deleteNode(head,key);
1つはポインタで、もう1つはポインタへのポインタです。 – Siguza
(関数内から)オブジェクトを変更するには、そのオブジェクトへのポインタが必要です。オブジェクトがポインタの場合は、ポインタへのポインタが必要です。期間。 – wildplasser