WYJ开怪 2020-06-06 11:43 采纳率: 0%
浏览 430
已采纳

带头结点的单链表创建问题

//--------------------------------------------
这个是结构体的定义
typedef struct LNode *PtrToLNode;
struct LNode {
    ElementType Data;
    PtrToLNode Next;
};
typedef PtrToLNode Position;
typedef PtrToLNode List;
//--------------------------------------------
带头节点的单链表创建函数一
List MakeEmpty() {
    List L = (List)malloc(sizeof(List));
    L->Next=NULL;
    return L;
}
//--------------------------------------------
带头节点的单链表创建函数二
List MakeEmpty(){
    List L=(List)malloc(sizeof(struct LNode));
    L->Data=0;
    List head=(List)malloc(sizeof(struct LNode));
    head->Data=0;head->Next=NULL;
    L->Next=NULL;
    return L;
}
//--------------------------------------------

这两个创建函数有什么不一样吗,结果都一样

  • 写回答

1条回答 默认 最新

  • 火花20180731 2020-06-06 12:48
    关注

    链表的每一个节点都是在内存中找得到的(struct LNode)实例,使用(List)指针只是为了把这些实例的地址串起来
    用一个List指针备份第一个节点的地址,于是我们就可以通过这个List指针进入第一个节点内存,
    进而通过第一个节点的next指针进入下一个节点的内存,
    以此类推依次访问,最后一个节点的next没有下一节点就只能为NULL
    你用sizeof(List)分配出来的是一个(List)指针的空间,而不是一个(strcut LNode)节点的空间
    所以你的第一个函数并不能创建出头节点
    malloc返回的类型是void*类型,你把生成的东西强转成了List类型,但实际上你创建的是个List*类型

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 逻辑谓词和消解原理的运用
  • ¥15 三菱伺服电机按启动按钮有使能但不动作
  • ¥15 js,页面2返回页面1时定位进入的设备
  • ¥200 关于#c++#的问题,请各位专家解答!网站的邀请码
  • ¥50 导入文件到网吧的电脑并且在重启之后不会被恢复
  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号