克己ovo 2021-09-13 16:02 采纳率: 90%
浏览 65
已结题

单链表 为什么不能打印出单链表 能够调用函数


#include<stdio.h>
#include<malloc.h>
#define elemType int
//定义数据元素
typedef struct LNode{
    elemType data;            //数据域 
    struct LNode *next;       //指针域 
}LNode,*List;
//头插法创建单链表
List ListHeadInsert(List p){
    List s;
    int x;
    p = (List)malloc(sizeof(LNode)); //创建空结点 
    p->next = NULL;
    printf("请输入数据(以9999结束):\n");
    scanf("%d",&x);
    while(x!=9999){
    s = (List)malloc(sizeof(LNode));
    s->data = x;
    s->next = p->next; 
    p->next=s;
    scanf("%d",&x); 
    }
    return p;
}
//打印单链表
List PrintList(List p){
    printf("调用成功");
    while(p){
        printf("%d",p->data);
        p=p->next;
    }
//    if(!p->next){
//        printf("该单链表为空链表"); 
//    }
    return p;
}
int main(){
    List p ;
    ListHeadInsert(p);
    printf("创建成功\n"); 
    PrintList(p);
}








  • 写回答

2条回答 默认 最新

  • qfl_sdu 2021-09-13 16:09
    关注

    ListHeadInsert函数逻辑写错了,给你改一下

    
    #include<stdio.h>
    #include<malloc.h>
    #define elemType int
    //定义数据元素
    typedef struct LNode{
        elemType data;            //数据域 
        struct LNode *next;       //指针域 
    }LNode,*List;
    //头插法创建单链表
    List ListHeadInsert(List p){
        List s,tt; //修改1,多声明一个变量
        int x;
        p = (List)malloc(sizeof(LNode)); //创建空结点 
        p->next = NULL;
    
        tt = p; //修改2,下面的操作用tt,避免改变p的值
    
        printf("请输入数据(以9999结束):\n");
        scanf("%d",&x);
        while(x!=9999){
            s = (List)malloc(sizeof(LNode));
            s->data = x;
            s->next = NULL;//p->next;  修改3
            tt->next = s ;//p->next=s; 修改4
            tt = s;  //修改5
            scanf("%d",&x); 
        }
        return p;
    }
    //打印单链表
    void PrintList(List p){ //修改5,打印函数不用返回
        List t = p->next; //修改6:因为你的头结点中没有存放数据,所以从p->next开始遍历输出
        printf("调用成功");
        while(t){
            printf("%d",t->data);
            t=t->next;
        }
        //    if(!p->next){
        //        printf("该单链表为空链表"); 
        //    }
        //return p;  //打印函数,不用再返回了
    }
    int main(){
        List p = 0 ;
        ListHeadInsert(p);
        printf("创建成功\n"); 
        PrintList(p);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月21日
  • 已采纳回答 9月13日
  • 修改了问题 9月13日
  • 创建了问题 9月13日

悬赏问题

  • ¥15 Python语言实验
  • ¥15 我每周要在投影仪优酷上自动连续播放112场电影,我每一周遥控操作一次投影仪,并使得电影永远不重复播放,请问怎样操作好呢?有那么多电影看吗?
  • ¥20 电脑重启停留在grub界面,引导出错需修复
  • ¥15 matlab透明图叠加
  • ¥50 基于stm32l4系列 使用blunrg-ms的ble gatt 创建 hid 服务失败
  • ¥150 计算DC/DC变换器平均模型中的参数mu
  • ¥25 C语言代码,大家帮帮我
  • ¥15 请问以下文字内容及对应编码是用了什么加密算法或压缩算法呢?
  • ¥50 关于#html5#的问题:H5页面用户手机返回的时候跳转到指定页面例如(语言-javascript)
  • ¥15 无法使用此凭据登录,因为你的域不可用,如何解决?(标签-Windows)