编程高手帮帮忙!!!

来源:百度知道 编辑:UC知道 时间:2024/05/26 09:50:32
. 初始化链表L
void InitList(LNode **head)
{
*head=(*LNode)malloc(sizeof(LNode));
//为头结点分配存储单元
if (*head != NULL) {(*head)->next=NULL; return OK;}
else return ERROR ;
}
为什么要用双指针啊!!
回答的尽量简单明白!谢谢了!!
调用的时候怎么调用?

第一句*head=(*LNode)malloc(sizeof(LNode)); 应该是*head=(LNode *)malloc(sizeof(LNode)); 吧?

你说的是指向指针的指针吧?

LNode **head

这个函数需要用参数head把新节点的地址传回给调用者,这样调用这才知道list的首节点地址,才能使用list。

如果参数是LNode * head,则无法将malloc分配的节点低值返回给调用者,因为C的传参数方式是传值,

如果是head=(LNode*)malloc(sizeof(LNode)); ,则head形参是新分配的指针变量,这个形参不等于实参,形参head的改变并不改变实参的值,所以无法将地址传给调用者。
-------------------------------------
很简单

LNode *a;

InitList(&a)
就可以,调用后a指向list首节点地址,&a是指向指针的指针

传进来一个指针的地址 ,这个地址在函数中被赋值这样在函数返回后
head 就是指向在函数中malloc返回的地址了

双指针? 你是指LNode** head吗?
这是因为参数是(LNode*) 的指针。
否则 ,如果像void InitList(LNode *head) ,调用时Init(h)(其中h是Lnode*型),调用结束后h的值不会变。函数操作的是h的一个副本。

第一个指针指向头节点,下一个指针指向头节点的下一个节点。这样才可以安序访问啊