我有以下函数在链表的末尾附加一个双值。
void deappendlinked(dNODE *head,double value){
while(head!=NULL){
if(head->next==NULL){
break;
}
head=head->next;
}
dNODE *newElement=memalloc(sizeof(dNODE));
newElement->data=value;
newElement->next=NULL;
head->next=newElement;
}
它接收头,即链表的第一个元素的地址,我通过它迭代到最后。
由于我不是在传递指针的指针,所以我不需要一个临时变量来保存头的值,对吗?(也就是说,我可以做我做过的事情——至少它有效。(
由于我不传递指针的指针,所以我不需要临时变量来保存头的值,对吗
这是正确的。函数将接收调用模块传递的指针的副本。在该模块中,该指针的值将不会被您的函数更改(即,它将保持指向列表的顶部(。
顺便说一句,即使你知道你传递的head
值不会(读作:应该不是(是NULL
,最好还是添加一个检查,以防你代码的未来编辑器做了一些愚蠢的事情。
此外,您的while
循环可以大大简化:
void deappendlinked(dNODE *head,double value) {
if (head == NULL) {
// Optional error message?
return;
}
while (head->next != NULL) head = head->next;
dNODE *newElement=memalloc(sizeof(dNODE));
newElement->data=value;
newElement->next=NULL;
head->next=newElement;
}