这几个L为啥加星呀,尤其是第三个真的不懂,明明感觉不用加的

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加*都是多余的,因为下面两种情况我们只需要得到一个指针即可。