注册 登录
编程论坛 数据结构与算法

关于C语言数据结构单链表初始化的问题

EricZhan 发布于 2010-08-20 08:23, 4045 次点击
这是我在书上看到的例子:
typedef struct
{
    DateType date;
    struct Node *next;
}*Linklist;

void InitList(LinkList *head)
/*将单链表初始化为空。动态生成一个头结点,并将头结点的指针域置为空。*/
{
    if((*head=(LinkList)malloc(sizeof(ListNode)))==NULL)        /*为头结点分配一个存储空间*/
        exit(-1);
    (*head)->next=NULL;                /*将单链表的头结点指针域置为空*/
}
我不明白这里为什么要用二级指针LinkList *head.
这样不可以吗?
void InitList(LinkList head)
/*将单链表初始化为空。动态生成一个头结点,并将头结点的指针域置为空。*/
{
    if((head=(LinkList)malloc(sizeof(ListNode)))==NULL)        /*为头结点分配一个存储空间*/
        exit(-1);
    head->next=NULL;                /*将单链表的头结点指针域置为空*/
}

教材说”因为单链表操作用需要修改头指针,所以要用二级指针初始化“。我还不明白这句话。
求高手指点。最好能像未命名的图片一样描述一下,之后发送到我的邮箱s461934079@
拜托了,我想了好久都不明白这个问题
只有本站会员才能查看附件,请 登录


[ 本帖最后由 EricZhan 于 2010-8-20 08:43 编辑 ]
6 回复
#2
wwqiu2010-08-20 11:26
你可能参数传递那里理解吾是很好吧,如果按你那种做法似乎不太行,因为malloc就已经返回一个指针了,如果你不用二级指针,就不能改变原来指向头结点的那个指针
因为你定义:
linklist A;
而你要通过二级指针来改变A的值,也就是使它指向你刚申请的结点空间
#3
EricZhan2010-08-21 08:40
回复 2楼 wwqiu
你的意思是不是在创建的空间前面再创建一个head指针,指向这个空间?
#4
acman2010-08-21 11:19
单链表的初始化  就是  做一个 头指针和一个尾指针
head=last=(struct pp*)malloc(sizeof(struct pp));
以后 每一次 用的时候 想要加进去 就在结尾处加  如果要排序的话 就从head 开始  一个一个找  如果删除 .......
#5
wwqiu2010-08-21 12:33
差不多那个意思,你在申请一个空间之前,再临时建立一个指针,指向那空间,而且用那临时指针来改变你的linklist A中A的值,使A也指向那空间,完全这些之后,你那初使化函数结束,而那临时指针也会释放,而那A依然会指向那新申请的空间,这就正式完全初使化
#6
2010-08-22 17:18
建议楼主深入研究下指针。
1