Linklist *L和Linklist L初始化链表时应该用哪个
时间: 2023-05-28 13:05:02 浏览: 71
Linklist *L应该用指针类型,而Linklist L应该用结构体类型。
具体来说,Linklist *L是一个指向链表头节点的指针,它需要在初始化时赋值为NULL,表示链表为空。而Linklist L是链表的头节点,它需要在初始化时先创建一个空节点,并将其next指针赋值为NULL,表示链表为空。
因此,链表初始化时应该使用如下代码:
```c
Linklist *L = NULL; // 初始化链表头指针
Linklist L; // 初始化链表头节点
L.next = NULL; // 将链表头节点的next指针赋值为NULL
```
相关问题
void InitLinkList(LinkList *list);//初始化链表
这是一个初始化链表的函数声明,它的参数是一个指向链表的指针。在函数内部,我们可以为链表分配内存,并将其头指针指向 NULL,以表示链表为空。以下是一个示例实现:
void InitLinkList(LinkList *list) {
*list = (LinkList)malloc(sizeof(Node));
(*list)->next = NULL;
}
这个函数将创建一个新的链表,并将其头指针指向 NULL。
c++里面的void Initlist(linklist *&L)的*&在c语言里面应该怎么用
在C语言中,可以使用指针来模拟C++中的引用参数。因此,你可以将 `void Initlist(linklist *&L)` 转换为 `void Initlist(linklist **L)`,并在函数内部使用二级指针来操作链表。例如:
```c
typedef struct ListNode {
int val;
struct ListNode *next;
} ListNode;
void Initlist(ListNode **L) {
*L = NULL; // 初始化链表为空
}
void Insert(ListNode **L, int val) {
ListNode *newNode = (ListNode*)malloc(sizeof(ListNode));
newNode->val = val;
newNode->next = *L;
*L = newNode;
}
int main() {
ListNode *L;
Initlist(&L);
Insert(&L, 1);
Insert(&L, 2);
Insert(&L, 3);
// ...
return 0;
}
```
在上面的代码中,`Initlist` 函数使用二级指针 `ListNode **L` 作为参数,通过修改指针的指向来初始化链表。在 `main` 函数中,我们使用 `&L` 来传递链表指针的地址给 `Initlist` 函数。这样,当我们在 `Initlist` 函数中修改 `*L` 的值时,实际上是在修改 `main` 函数中的 `L` 指针所指向的地址的值。