- 论坛徽章:
- 0
|
看了半天终于找到是哪儿出错了
void create_list(NODE *l)
{
NODE*p,*q;
int i,n;
printf("请输入链表长度:");
scanf("%d",&n);
printf("请输入链表各结点的元素值 :");
l=p=(NODE*)malloc(sizeof(NODE));
scanf("%d",&p->x);
q=NULL;
for (i=n-1;i>0;--i)
{
q=(NODE*)malloc(sizeof(NODE));
scanf("%d",&q->x);
q->next=NULL;p->next=q;p=p->next;
}
output_list(l);
printf("\n");
}
这个函数不能达到你预期的目的。
你是想用这个函数返回分配链表首地址是吧,可是呢
- void create_list(NODE *l)
复制代码
中的型参不能返回地址。
可以修改成- void create_list(NODE **l)
复制代码
然后- {
- NODE*p,*q;
- int i,n;
- printf("请输入链表长度:");
- scanf("%d",&n);
- printf("请输入链表各结点的元素值 :");
- /*
- l=p=(NODE*)malloc(sizeof(NODE));
- */
- *l=p=(NODE*)malloc(sizeof(NODE));/*这个地方改过*/
- scanf("%d",&p->x);
- q=NULL;
- for (i=n-1;i>0;--i)
- {
- q=(NODE*)malloc(sizeof(NODE));
- scanf("%d",&q->x);
- q->next=NULL;p->next=q;p=p->next;
- }
- /*
- output_list(l);
- */
- output_list(*l);/*这个地方也改动了一下*/
- printf("\n");
- }
复制代码
或者这个函数返回一个指针
那就这样写啦
- NODE * create_list(void)
- {
- /*
- NODE*p,*q;
- */
- NODE*p,*q,*l;
- int i,n;
- printf("请输入链表长度:");
- scanf("%d",&n);
- printf("请输入链表各结点的元素值 :");
- l=p=(NODE*)malloc(sizeof(NODE));
- scanf("%d",&p->x);
- q=NULL;
- for (i=n-1;i>0;--i)
- {
- q=(NODE*)malloc(sizeof(NODE));
- scanf("%d",&q->x);
- q->next=NULL;p->next=q;p=p->next;
- }
- output_list(l);
- printf("\n");
- return l;
- }
复制代码
不过改动后主函数中要作相应的改动 |
|