gloomy_day 2023-01-20 17:05 采纳率: 0%
浏览 17

尾插法建立链表但输出空白

有没有佬看一下为啥我尝试尾插法建立链表但没法输出数据
编译成功但输出为空白

代码如下,谢谢了佬们

#include<stdio.h>
#include<stdlib.h>
typedef  struct link
{
    int data;
    struct link *next;
}link;
link *ap(link *head,int *d); 
link *dis(link *head);
int main()
{
    int a=1;
    link *head=NULL;
    while(a!=0)
    {
    
        *ap(head,&a);
        *dis(head);
    }
    
}

link *ap(link *head,int *d)
{
    link *p;
    p=(link*)malloc(sizeof(link));
    if(head==NULL)
    {
        head=p;
    }
    else
    {
        while(head->next!=NULL)
        {
            head=head->next;
        }
        
        head->next=p;
    }
    scanf("%d",d);
    p->data=*d;
    p->next=NULL;
    return head;
}

link *dis(link *head)
{
    if(head!=NULL)
    {
        printf("%d",head->data);
        head=head->next;
    }
    return head;
}

  • 写回答

2条回答 默认 最新

  • 「已注销」 2023-01-20 17:13
    关注

    在主函数中,你调用了ap和dis两个函数,并将返回值赋值给head,但是你在调用ap和dis函数时使用了*号,这会导致head的值被重新赋值为NULL,导致无法正常输出。

    正确的做法应该是:

        head = ap(head,&a);
        head = dis(head);
    

    还有一处需要修改,在while循环里你应该在读入数据之后判断是否继续循环,而不是在读入之前,这样可以保证第一个数据也能被正确读入。

    代码如下

    #include<stdio.h>
    #include<stdlib.h>
    typedef  struct link
    {
        int data;
        struct link *next;
    }link;
    link *ap(link *head,int *d); 
    link *dis(link *head);
    int main()
    {
        int a=1;
        link *head=NULL;
        while(a!=0)
        {
            scanf("%d",&a);
            head = ap(head,&a);
            head = dis(head);
        }
    }
    
    link *ap(link *head,int *d)
    {
        link *p;
        p=(link*)malloc(sizeof(link));
        if(head==NULL)
        {
            head=p;
        }
        else
        {
            while(head->next!=NULL)
            {
                head=head->next;
            }
            head->next=p;
        }
        p->data=*d;
        p->next=NULL;
        return head;
    }
    
    link *dis(link *head)
    {
        if(head!=NULL)
        {
            printf("%d",head->data);
            head=head->next;
        }
        return head;
    }
    

    若对您的问题有帮助,望采纳

    评论

报告相同问题?

问题事件

  • 创建了问题 1月20日