线性表的排序合并

#include <stdio.h>#include <malloc.h>#define NULL 0#define LEN sizeof(struct number)struct number //构造函数是链表输入{ int num; struct number *next;};int n;struct number *creat(){ struct number *head; struct number *p1; n=0; p1=(struct number * )malloc(LEN); scanf("%d",p1->num); head=NULL; while(p1->num!=0) { n=n+1; if(n==1) head=p1; else p1->next=p1; p1=(struct number * )malloc(LEN); scanf("%d",&p1->num); } p1->next=NULL; free(p1); return(head);}struct number *insert(struct number *n1, struct number *n2) //合并两个链表{ struct number *p,*head; if(n1->num<n2->num) { head=p=n1; n1=n1->next; } else { head=p=n2; n2=n2->next; } while(n1!=NULL&&n2!=NULL) if(n1->num<n2->num) { p->next=n1; p=n1; n1=n1->next; } else { p->next=n2; p=n2; n2=n2->next; } if(p!=NULL) p->next=n1; else p->next=n2; return head;}void print(struct number *head) //使链表逆序输出{ struct number *p; p=head; while(p) { printf("%d",p->num); p=p->next; }}void main(){ struct number*head,*num,*head1,*head2; int a1,a2; printf("Please input first link information:尀n"); head1=creat(a1); printf("尀nPlease input second link information:尀n"); head2=creat(a2); head=insert(a1,a2); print(head);} 为什么编译时会出现D:尀UserData尀Administrator尀桌面尀链表.cpp(81) : error C2660: ✀creat✀ : function does not take 1 parametersD:尀UserData尀Administrator尀桌面尀链表.cpp(83) : error C2660: ✀creat✀ : function does not take 1 parametersD:尀UserData尀Administrator尀桌面尀链表.cpp(84) : error C2664: ✀insert✀ : cannot convert parameter 1 from ✀int✀ to ✀struct number *✀ Conversion from integral type to pointer type requires reinterpret_cast, C-style cast or function-style cast执行 cl.exe 时出错.
2026年09月22日 17:20
有1个网友回答
网友(1):

你看看你怎么定义你的creat函数的?
struct number *creat()
{
......
}
这里你分明没有指定creat的形参,默认当然就不能接受实参。但是你在main函数中调用的时候
head1=creat(a1);
却又硬给creat函数塞进去一个实参a1,这下当然就消化不良咯。所以办法有两个,要么你给creat函数加上形参,不过我似乎没有发现你的creat函数有使用形参的行为;要么,修改你的main函数,把实参去掉。

还有,main函数中有这句
head=insert(a1,a2);
a1和a2分明是两个int型变量,可是你的insert函数的形参类型却要求是结构体指针,这个我不知道你是怎么考虑的。