InitList(LinkList*L)
{
*L=(LinkList)malloc(sizeof(node));
(*L)->next=NULL;
}
如果解释不错,还望采纳
程序的详细流程如下:
1、使用malloc函数为链表的结构体分配内存空间,返回的是指向该内存空间的指针,该指针赋值给LinkList类型的指针L。
2、通过解除指针L的引用,使得L指向头节点。
3、设置头节点的指针域为NULL,表示头节点为链表的末尾节点。
4、这段代码仅完成了链表的初始化,需要添加数据元素等操作需要再编写代码。
//
*L 加一个星号()表示它是一个指针变量,而不是一个常规的变量。在 C 语言中,指针变量存储的是内存地址,而不是直接存储的数据。
在这段代码中,L 是一个链表的指针,所以它必须是一个指针变量。通过加星号,它表示指向一个链表的指针。
由于是指针变量,因此需要使用二级指针进行初始化。在这段代码中,在定义函数时将 L 定义为 LinkList 类型的指针,并在函数内部通过两级指针进行初始化。**
你是想要初始化一个链表吗,对于函数参数中的【】指的就是你在外界要传入一个有关链表这个结构体的地址进来;
第二个L前面的【】可以不用加的;
第三个【*】指的是解引用的意思,但是你不需要去解引用的,直接->
就可以访问到这个指针的next域了;
可以看看我写的这段代码
SLTNode* BuySLTNode(SLTDataType x)
{
//动态开辟
SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));
if (newnode == NULL)
{
perror("malloc fail\n");
exit(-1);
}
newnode->data = x;
newnode->next = NULL;
}
SLTNode* SListCreate(int n)
{
SLTNode* phead = NULL, * ptail = NULL;
for (int i = 0; i < n; ++i)
{
SLTNode* newnode = BuySLTNode(i);
if (phead == NULL)
phead = ptail = newnode;
else
{
ptail->next = newnode;
ptail = newnode;
}
}
return phead;
}
void InitList(LinkList*L) 初始化函数里,形参 L是二级指针。不同形参的初始化函数写法,供参考:
#include <stdio.h>
#include <stdlib.h>
typedef struct node {
int data;
struct node* next;
}Node,* LinkList;
void InitList(LinkList* L) //二级指针
{
(*L) = (LinkList)malloc(sizeof(Node));
(*L)->next = NULL;
}
LinkList InitList(LinkList L)//一级指针
{
L = (LinkList)malloc(sizeof(Node));
L->next = NULL;
return L;
}
void Initlist(LinkList& L)//引用
{
L = (LinkList)malloc(sizeof(Node));
L->next = NULL;
}
int main()
{
LinkList L, L1, L2;
InitList(&L);
L1 = InitList(L1);
Initlist(L2);
return 0;
}
可以看一下linklist的代码吗?正常情况下,下面两个L加*都是多余的,因为下面两种情况我们只需要得到一个指针即可。