【发布时间】:2025-11-30 20:40:02
【问题描述】:
Cliente insert_last_adq(int option,Viagem global,Cliente adq,Cliente esp,int data,char *destino,int cod_destino,int id,char *nome){
/*FIX: Caso quando full*/
Cliente new_node = (Cliente) malloc( sizeof(Clientes_node) );
Cliente adq_orig = adq;
Cliente esp_orig = esp;
new_node->data=data;
new_node->cod_destino=cod_destino;
new_node->id=id;
strcpy(new_node->destino,destino);
strcpy(new_node->nome,nome);
switch( option ){
case 0:
if(adq==NULL){
new_node->next=NULL;
if(option==0){
diminuir_disp(global,data,cod_destino);
}
return new_node;
} else if( get_viagens_disp_destino(global,data,cod_destino) > 0 ){
while(adq->next!=NULL){
adq=adq->next;
}
adq->next=new_node;
new_node->next=NULL;
diminuir_disp(global,data,cod_destino);
return adq_orig;
} else if( get_viagens_disp_destino(global,data,cod_destino)==0 ){
/*FIX: Not workin*/
if(esp==NULL){
new_node->next=NULL;
esp=new_node;
}else{
while(esp->next!=NULL){
esp=esp->next;
}
esp->next=new_node;
new_node->next=NULL;
return adq_orig;
}
}
break;
case 1:
if(esp==NULL){
new_node->next=NULL;
return new_node;
}else{
while(esp->next!=NULL){
esp=esp->next;
}
esp->next=new_node;
new_node->next=NULL;
return esp_orig;
}
break;
}
}
在评论 FIX:不工作后,我有一行:
esp=new_node;
所以我的目标是给出链表的起始地址,尤其是 new_node 的地址。 我知道如果我返回一个地址,我可以更改它,但问题是 adq 链表将是接收返回值的那个。
顺便说一句,esp 和 adq 一样指向结构,因此不需要“*”。 并且 adq 和 esp 属于同一类型“Cliente”
【问题讨论】:
-
不要在 typedef 后面隐藏指针性质,显然你正在使用类型
Cliente。 -
-
那我怎样才能将adq初始化为NULL呢?
-
要“将adq初始化为NULL” -->
Cliente_as_a_non_pointer_type *adq = NULL; -
不要转换从
malloc()返回的结果。在C语言中不是必须的,可以隐藏包含所需函数原型的失败。
标签: c linked-list