单链表的一些疑惑

作为自己的笔记记录一下

单链表的建立

typedef struct Node

{

    ElemType data;

    struct Node *next;

}Node;

typedef struct Node *LinkList;

Status InitList(LinkList *L)

{

    *L=(LinkList)malloc(sizeof(Node)); /* 产生头结点,并使L指向此头结点 */

    if(!(*L)) /* 存储分配失败 */

            return ERROR;

    (*L)->next=NULL; /* 指针域为空 */

    return OK;

}

int main()

{       

LinkList A;

Status i;

       i=InitList(&A);

}

问题:为什么单链表建立函数的参数要用二级指针LinkList *L 而不用一级指针呢?

InitList(&A);

L=&A;

*L就为一级指针A存储的地址

*L=(LinkList)malloc(sizeof(Node));  此操作就是把建立一个内存地址赋给一级指针A

如果使用一级指针

int main()

{       

   struct Node A;

       LinkList L;

Status i;

L=&A;

       i=InitList(L);

}

Status InitList(LinkList L) //L=&A;

{

L=(LinkList)malloc(sizeof(Node));

//L在此函数内新赋值了一段地址 原先是L=&A;但出了此函数L就释放了

    if(!(*L)) /* 存储分配失败 */

            return ERROR;

    (*L)->next=NULL; /* 指针域为空 */

    return OK;

}

或许也可以

struct Node A; struct Node B;

L=&A; L->next=&B; 以此类推 但是太过浪费

建立一个链表指针L

L存储的是头指针地址  L->next存储的是第一个结点的地址 L->data 没有值为空

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值