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

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

//--------------------------------------------
这个是结构体的定义
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*类型

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

报告相同问题?